一个很初级的C++指针问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 18:15:02
int a=5;
int *p=a;
*p=3;和p=3;的区别是什么?
后者会报错吗? *p=3是不是p指向另一个内存单元了?该单元的值是3.还是p还是指向原来的内存单元,只是改变了该单元的值 从5改到3.

首先 int* p = a 这个写法是错误的,应该写成 int* p = &a
其次 *p = 3 是只把指针p指向的对象赋值为3,在这里就是把a赋值为3
再次 p = 3这个写法也是错误的,p是指指针的地址,*p才是指针指向的对象。p的值在指针生成时已经有了,你改变它会报错的。

(*p) = 3是说这个内存单位里面储存3
p = 3 是说现在p 指向 3 这个内存单位

后者会报错。
p=后面的应该是个地址,你给它一个值当然会报错,前面是正确的。
*p=3就等于a=3,没指另一个内存单元。

int a=5;
的时候申请了一块内存单元,然后让p指向它,*p=3;是把这个内存单元的值从5改为3

会警告 因为p指向的是地址而直接指向一个常数是错误的赋值。不是另指一个内存单元,指向a的即p的单元,从而改变值

int* p = a
这个可能会报错,你编译了没有。