text6789 发表于 2014-9-5 15:33:18

为何指针赋值得到的是这个值?

#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.?

text6789 发表于 2014-9-5 17:23:33

{:1_1:}{:1_1:}{:1_1:},不知道a如何得到20的赋值空间的信息

text6789 发表于 2014-9-5 18:18:46

原题目:。最后我给你一道题:程序如下。
   char a,*pa;
   a = 10;
   pa = &a;
   *pa = 20;
   printf("%d", a);

浅微风 发表于 2014-9-5 20:39:31

当然是20啊,pa指向a的地址,*pa就是该地址的内容,所以*pa和a是等价的,程序中将20赋值给pa指向地址的内容,也就是赋值给a

elvo 发表于 2014-9-6 08:52:54

使用你的程序调试一下,应该可以更直观地看到它们的关系

在我的机子上pa是等于0x28ff47(十六进制,你的机子上是十进制的2293623),pa是一个指针
它的值是一个地址,这个地址上的值就是a,因为a是char类型,一个字符。。看看内存中在pa指向的地址(0x28ff47)上
的值是0a(十六进制),换算成十进制就是10.。。等于a的值。


程序继续执行下去,当执行过*pa=20;这句时,看下图,pa地址上的值变成了14(这也是十六进制的值),换算成十进制为20.。。



所有pa=&a;指针pa的值是内存中a所在的地址,*pa表示地址上的值。


text6789 发表于 2014-9-6 09:05:16

昨晚自己去回想了.*p一直都是用地址的,不知道,我这样的方式查看信息是否对.

text6789 发表于 2014-9-6 09:13:27

elvo 发表于 2014-9-6 08:52
使用你的程序调试一下,应该可以更直观地看到它们的关系

在我的机子上pa是等于0x28ff47(十六进制,你的 ...

非常好!,这样的查看方式,不过,请问下楼主,是那个debug查看地址的,有楼主以上的截图界面?

牡丹花下死做鬼 发表于 2014-9-6 18:32:03

←_←
pa = &a; //*pa等价于 a
然后你*pa = 20;不就相当于 a = 20;
你说a是几??

拈花小仙 发表于 2014-9-6 22:49:18

牡丹花下死做鬼 发表于 2014-9-6 18:32
←_←
pa = &a; //*pa等价于 a
然后你*pa = 20;不就相当于 a = 20;


{:7_139:}又看到熟悉的名字了,感觉无比亲切,丹丹加油~

MyOrange 发表于 2014-9-7 05:45:26

你将pa赋值为a的地址,所以pa==&a,那当然你修改地址为pa的数据时,就相当于修改地址为a的数据咯

风之残月 发表于 2014-9-7 08:15:35

pa = &a, pa指向了a, 最后 *pa = 20; 相当于 a = 20

C语言入门 发表于 2014-9-7 17:00:40

你既然用的指针,就是直接修改地址,所以值变了

隐袭战龙 发表于 2014-9-7 18:24:33

因为*pa改的是a,*pa就是和a挂钩了,*pa改,a也要改

gyixue 发表于 2014-9-7 22:21:21

帮楼主顶一下

feixiangmenghu 发表于 2014-9-8 20:47:31

地址没有bian,只是地址里的值变了

text6789 发表于 2014-9-8 20:54:08

隐袭战龙 发表于 2014-9-7 18:24
因为*pa改的是a,*pa就是和a挂钩了,*pa改,a也要改

是这样的,不过,看了c书籍,我个人的感受是,c的指针是地址指向功能,那么就是复用某个指向的地址功能。感觉指针一直是复用某个最初指向的地址

梦生醉死 发表于 2014-9-8 22:22:21

pa = &a;
*pa = 20;
你把a的地址给了pa所以 你给了*pa赋值,所以就相当于给a赋值.

骑猪撞宝马 发表于 2014-9-9 17:12:49

来学习额

骑猪撞宝马 发表于 2014-9-10 20:02:29

来学习啦

剑雨君 发表于 2014-9-10 20:23:48

text6789 发表于 2014-9-5 17:23
,不知道a如何得到20的赋值空间的信息

是这样的,指针指向a嘛,也就是指针的内容存储的就是a的地址。*pa就是在相当于a了。对*pa进行修改,也就是对a进行修改了。
页: [1] 2
查看完整版本: 为何指针赋值得到的是这个值?