美文网首页selector
19. C & OC指针

19. C & OC指针

作者: yaoyao妖妖 | 来源:发表于2017-09-22 16:52 被阅读55次

C语言

基本定义
  • 变量:代表一个有名字的,具有特定属性的一个存储单元;
  • 变量名: 实际上是以一个名字代表的一个存储地址;(变量名和变量的地址 一一对应)
变量的访问方式:
  • 直接按照变量名进行访问,叫做 “直接访问” 的方式;
  • 将变量 i 的地址存放到另外的一个变量中去,然后通过该变量来查找变量 i 的地址,从而访问该变量叫做间接访问;
屏幕快照 2017-09-22 15.44.56.png
指针:
  • 指针(一个地址):一个变量的地址称为该变量的指针;

  • 指针类型: 指向整形数据的指针类型为 int *;

  • 指针变量(一个变量):存放另外一个变量地址的变量,指针变量的值是地址;

  • 指针变量中只能存放地址(指针),不能将一个整数赋值给指针变量;

  • 指针变量的定义: 类型名 * 指针变量名;

运算符:
  • &运算符: 取地址运算符;
    &a 代表 a 的地址
  • *运算符: 指针运算符(间接访问运算符);
    p 代表指针 p 指向的对象(point = i)
数据在内存中的存储和处理:
  • 在程序中定义了一个变量,在对程序进行编译的时候,系统就会给这个变量分配内存空间。编译系统根据程序中定义的变量类型,分配一定长度的空间;
  • 程序经过编译之后已经将变量名转化为变量的地址,对变量值的存取都是通过地址来进行的。
指函数调用的过程:(值传递)
  • 1.在定义函数中指定的形参,在没有调用函数的时候,他们并不会占内存中的存储单元。等到函数发生调用的时候,形参将被临时分配内存单元;
  • 2.将实参对应的值传递给形参;
  • 3.使用形参进行运算;
  • 4.return 将函数值带回到主调函数;(没有返回值忽略这一步)
  • 5.释放形参单元,实参单元任然保留不变;
指针变量作为函数参数:
  • 指针变量作为函数参数,将形参传递给实参,采用的依然是值传递的方式;(同上)
  • 在OC中除了基本数据类型之外,大部分的对象都是通过间接访问来访问数据的。(NSString, NSArray.......)
//没有实际意义的例子,只是为了说明值传递的时候内存是怎样处理的
#include <stdio.h>
int main() {
   
    void value(int *p);
    int a;
    int *p;
    printf("please enter a");
    scanf("%d",&a);

    p = &a;
    value(p);
    return 0;
    
}

void value(int *p1){
    int *temp;
    temp = p1;
}
    NSString *nameString = @"nihao";
    [self initWithName:nameString];

-(void)initWithName:(NSString *)name {
    NSString *str = name;    
}

其实OC的底层是C实现的,在OC中大部分都是对象(指针),通过上面的两个例子我们来看看他们之间的异同:

屏幕快照 2017-09-22 16.38.11.png
  • 注:因为指针作为函数参数时,真正处理的还是形参,所以不能通过调用函数函数改变实参指针变量的值,但是可以改变实参指针变量所指向的变量的值。(也就是说可以改变 a 的值,不能改变 p 的值)。

相关文章

  • 19. C & OC指针

    C语言 基本定义 变量:代表一个有名字的,具有特定属性的一个存储单元; 变量名: 实际上是以一个名字代表的一个存储...

  • __bridge的作用

    将OC指针与C语言中指针(或者void *)相互转换。 OC指针与void *不能直接相互转化,涉及到OC中对象的...

  • nil,Nil,NULL,NSNull

    nil: OC中对象为空,指向不存在的对象指针 Nil:OC中类为空,指向0的类指针 NULL:C指针为空,在指针...

  • 各种nil,野指针,僵尸对象

    nil:OC中的对象的空指针 Nil:OC中类的空指针 NULL:C类型的空指针 NSNull:数值类的空对象 野...

  • 关于OC中的占位符的使用详解

    %d:整数%f:浮点数%s:方法%c:c字符%@:OC对象%p:指针

  • nil,Nil,NSNull,NULL区别

    定义 nil:指向oc中对象的空指针Nil:指向oc中类的空指针NULL:指向其他类型的空指针,如一个c类型的内存...

  • OC对象的本质

    OC和C_C++OC和C_C++ 一个NSObject对象占多少内存 也就是说person指针指向的这段内存空间,...

  • OC对象的本质(下)

    iOS | OC对象本质 | Objective-C OC对象的分类,对象的isa指针指向哪里,superClas...

  • const理解

    关于const *和* const的理解,可以参考[C C++ OC指针常量和常量指针区别]这篇文章。 该篇文章中...

  • 基础语法总结

    1.c++ .c/.mm 2013 OC第三 2.c语言字符串,使用字符数组构成,或者指针,清空指针NULL, 0...

网友评论

    本文标题:19. C & OC指针

    本文链接:https://www.haomeiwen.com/subject/ylassxtx.html