指针的创建
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* a
和int *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
。
网友评论