P=&a表示,P这个变量(内存地址)里面存的是a这个变量(即,内存地址)的地址。P在声明的时候,已经有自己的地址了,这样的用法就是把P里面的值改了,是安全的。
*P=a表示,P这个变量(即,内存地址)里面存的那个地址,其所存储的值为a这个变量的值。如果P里面的值(注意,是P里面的值,不是*P,也不是&P)是个非法的地址,比如说,你没有给初始值。那么,*P=a会导致segementation fault(linux下,如果windows下没出问题,那就是windows自己的底层库给P预设了安全的数值,但是,纯从标准上看,是不应该未初始化就这么写的。)
另外:
P=&a;
*P=b;
就会导致,a == b 为真。想想这个a是怎么变成与b相等的。这个例子应该足够理解其中区别了。
p是指针变量,它存储的是指针
p=&a 是把a的地址给p
而*p则和a是一个类型,就是说*p相当于一个存储数据的变量,*p=a就是把a的值赋给*p
例如把你的两个语句P=&a;*p=a 那么 a的地址先赋给了p, 之后p就是a的地址,*p实际就是a了,*p=a就是把a的值存入p地址所标示的内存单元中,实际上如果把这两句放一起,后面那句*p=a就是没用的了。
p是指针,它的数值是指向一个内存的地址,
&a的意思是取变量a的内存地址,所以p=&a的意思就是把变量a的内存地址赋值给指针p
*p的意思是取出p指向的内存地址的内容,所以*p=a的意思是把变量a的数据复制给指针p指向的内存空间.
如果不区分大小写的话。
根据你的赋值。
p是一个指针变量。
a是一个变量。
p=&a, 把变量a的地址赋值给指针变量p。
*p=a 变量a的值赋值给a指向的内存单位。