作业帮 > 综合 > 作业

C指针问题:int a=12,*p=&a如何解释?跟p=&a有什么区别?

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/04/29 20:10:22
C指针问题:int a=12,*p=&a如何解释?跟p=&a有什么区别?
我印象中应该p=&a是正确的,但是这里书上写成*p=&a,是什么意思?求详细解释
另外如上的话*&a==a和&*p==p是如何各自成立的?*&a是指向a地址的指针,a是12,两者一个地址一个值,怎么就等同了?&*p是p指针的地址,p是a的地址,两个地址怎么能等同呢?这个最棘手的问题,求教!
C指针问题:int a=12,*p=&a如何解释?跟p=&a有什么区别?
定义的时:int a=12,int *p=&a; (编译器首先在内存里开辟了一个空间,并把a的地址放进去)
这在c语言中叫做“初始化”——在定义的时候给予一个初始的值;
如果没有进行初始化,定义成,int a,*p; 则编译器会给一个值,一般为0或空值.
对于,int *p; p=&a; (编译器首先在内存里给P分配一个空间,然后给它赋值,一般赋0x00000000,然后再把a的地址取出,放到p中)比直接初始化,多了一个赋值.用起来效果一样.
再问: 能帮我回答后面补充的问题吗?很多人跟我一样有这个困惑。存储空间,地址和值的问题。
再答: 你搞混的本质原因是没弄懂:* 有两种用处,1.定义指针时使用,2.解引用符 *&a==a 分解为:*(&a)==a, 其中,&a表示对a 变量取地址,这里的*是解引用符,它是取地址符&逆向,*(&a)等同于 a, 这里的*和定义指针时的*不是一个概念。 &*p分解为:&(*p),其中,*p表示取得p指针指向的内存区域,(如果指针p事先是指向a的话,那么*p就等同于a),所以&(*p)等同于&a,它是一个地址。