OC中的*和&

2019-05-17  本文已影响0人  不是假发是桂

指针的创建

Person *p = [Person alloc] init];
p.name = "小明";

这句代码的意义就是创建一个Person类型的指针,p才是我们创建的变量而不是*p。那这段代码为什么不这样写 Person* p = [Person alloc] init];

别急,先看看这句代码
int* a,b;
按我的逻辑这就是定义了a,b两个指针,但是其实这样是定义了一个a指针和一个b整型。int *a,*b才是定义两个指针,既然定义一个指针的时候int* aint *a都行,那我们就保持*a这种方式好了。

*和&的用法

有这么一段经典代码。

int a = 1;
int *p = &a; 
int b = *p; 

思考一下b最终等价于什么?

你可能会有这样的骚操作。

*p = &a;
b = *p; 
这不是小学生就懂的逻辑吗?
b = &a

好,换成文章开头提到的写法
int* p = &a;
int b = *p;
你说还行的通吗?p是一个int类型的指针int*,此*p非彼*p

你可能想说。好吧,的确行不通 。我现在知道a 是什么,p是什么。但是&a和*p你没告诉我是什么,这怎么解。好,是时候告诉你用法了。
&a 变量a的地址(&符号:取地址)
*p p指针指向的变量(*符号:取变量)

再思考一下b最终等价于什么?

p是a的地址,*p不就是a吗。
最后答案就是 b = a

总结一下*号的两种用法
声明int*和 引用*p

上一篇 下一篇

猜你喜欢

热点阅读