为何指针赋值得到的是这个值?
#include <stdio.h>main(){
char a,*pa;
a = 10;
pa = &a;
*pa = 20;
printf("%d\n", a);
printf("%d\n", pa);
printf("%d\n", *pa);
return (0);
}
问题是:为何a的值是20.?
{:1_1:}{:1_1:}{:1_1:},不知道a如何得到20的赋值空间的信息 原题目:。最后我给你一道题:程序如下。
char a,*pa;
a = 10;
pa = &a;
*pa = 20;
printf("%d", a); 当然是20啊,pa指向a的地址,*pa就是该地址的内容,所以*pa和a是等价的,程序中将20赋值给pa指向地址的内容,也就是赋值给a 使用你的程序调试一下,应该可以更直观地看到它们的关系
在我的机子上pa是等于0x28ff47(十六进制,你的机子上是十进制的2293623),pa是一个指针
它的值是一个地址,这个地址上的值就是a,因为a是char类型,一个字符。。看看内存中在pa指向的地址(0x28ff47)上
的值是0a(十六进制),换算成十进制就是10.。。等于a的值。
程序继续执行下去,当执行过*pa=20;这句时,看下图,pa地址上的值变成了14(这也是十六进制的值),换算成十进制为20.。。
所有pa=&a;指针pa的值是内存中a所在的地址,*pa表示地址上的值。
昨晚自己去回想了.*p一直都是用地址的,不知道,我这样的方式查看信息是否对.
elvo 发表于 2014-9-6 08:52
使用你的程序调试一下,应该可以更直观地看到它们的关系
在我的机子上pa是等于0x28ff47(十六进制,你的 ...
非常好!,这样的查看方式,不过,请问下楼主,是那个debug查看地址的,有楼主以上的截图界面? ←_←
pa = &a; //*pa等价于 a
然后你*pa = 20;不就相当于 a = 20;
你说a是几?? 牡丹花下死做鬼 发表于 2014-9-6 18:32
←_←
pa = &a; //*pa等价于 a
然后你*pa = 20;不就相当于 a = 20;
{:7_139:}又看到熟悉的名字了,感觉无比亲切,丹丹加油~ 你将pa赋值为a的地址,所以pa==&a,那当然你修改地址为pa的数据时,就相当于修改地址为a的数据咯 pa = &a, pa指向了a, 最后 *pa = 20; 相当于 a = 20 你既然用的指针,就是直接修改地址,所以值变了 因为*pa改的是a,*pa就是和a挂钩了,*pa改,a也要改 帮楼主顶一下 地址没有bian,只是地址里的值变了
隐袭战龙 发表于 2014-9-7 18:24
因为*pa改的是a,*pa就是和a挂钩了,*pa改,a也要改
是这样的,不过,看了c书籍,我个人的感受是,c的指针是地址指向功能,那么就是复用某个指向的地址功能。感觉指针一直是复用某个最初指向的地址 pa = &a;
*pa = 20;
你把a的地址给了pa所以 你给了*pa赋值,所以就相当于给a赋值. 来学习额 来学习啦 text6789 发表于 2014-9-5 17:23
,不知道a如何得到20的赋值空间的信息
是这样的,指针指向a嘛,也就是指针的内容存储的就是a的地址。*pa就是在相当于a了。对*pa进行修改,也就是对a进行修改了。
页:
[1]
2