说一下*p = &a 和 p = &a的区别:
看一下写法上的:
(1)、
(1)、
int a = 4; int *p; p = &a;(2)、
int a = 4; int *p; *p = &a;(3)、
int a = 4; int *p = &a;可以看到,对于(1)和(3)来说,(1)是分两步完成与(3)相同的操作。(1)的第二行 int *p是声明一个未初始化的 int 类型指针 p(此时 p 的值是垃圾值)而第三行 p = &a是将 p 赋值为 a 的地址。
(3)是直接声明一个指向整型的指针 p,并立即将其初始化为变量 a 的地址,即p 直接指向 a 的地址。
可(2)就不同了,它是将 a 的地址赋值给 p 指向的内存位置(而非 p 本身)。什么意思呢,就是用大白话来讲 *p = &a是“把变量 a 的地址(内存门牌号)强行塞到指针 p 指向的那个小格子里”。
所以,p = &a的操作目标是指针 p 本身,int *p; p = &a的操作目标也是指针 p 本身,但*p = &a的操作目标是p 指向的内存,即将 a 的地址写入 p 指向的位置
且int != int *,两者类型是不一样的。