鱼C论坛

 找回密码
 立即注册
查看: 3358|回复: 24

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

[复制链接]
发表于 2014-9-5 15:33:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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);

} 图片1.png
问题是:为何a的值是20.?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-5 17:23:33 | 显示全部楼层
{:1_1:}{:1_1:}{:1_1:},不知道a如何得到20的赋值空间的信息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-5 18:18:46 | 显示全部楼层
原题目:。最后我给你一道题:程序如下。
&#160; &#160;char a,*pa;
&#160; &#160;a = 10;
&#160; &#160;pa = &a;
&#160; &#160;*pa = 20;
&#160; &#160;printf("%d", a);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-5 20:39:31 | 显示全部楼层
当然是20啊,pa指向a的地址,*pa就是该地址的内容,所以*pa和a是等价的,程序中将20赋值给pa指向地址的内容,也就是赋值给a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-6 08:52:54 | 显示全部楼层
使用你的程序调试一下,应该可以更直观地看到它们的关系
2014-09-06_084038.png
在我的机子上pa是等于0x28ff47(十六进制,你的机子上是十进制的2293623),pa是一个指针
它的值是一个地址,这个地址上的值就是a,因为a是char类型,一个字符。。看看内存中在pa指向的地址(0x28ff47)上
的值是0a(十六进制),换算成十进制就是10.。。等于a的值。


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


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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2014-9-6 09:05:16 | 显示全部楼层
QQ图片20140905181917.jpg 昨晚自己去回想了.*p一直都是用地址的,不知道,我这样的方式查看信息是否对.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-6 09:13:27 | 显示全部楼层
elvo 发表于 2014-9-6 08:52
使用你的程序调试一下,应该可以更直观地看到它们的关系

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

非常好!,这样的查看方式,不过,请问下楼主,是那个debug查看地址的,有楼主以上的截图界面?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-6 18:32:03 | 显示全部楼层
←_←
pa = &a; //*pa等价于 a
然后你*pa = 20;不就相当于 a = 20;
你说a是几??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

又看到熟悉的名字了,感觉无比亲切,丹丹加油~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 05:45:26 | 显示全部楼层
你将pa赋值为a的地址,所以pa==&a,那当然你修改地址为pa的数据时,就相当于修改地址为a的数据咯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 08:15:35 | 显示全部楼层
pa = &a, pa指向了a, 最后 *pa = 20; 相当于 a = 20
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 17:00:40 | 显示全部楼层
你既然用的指针,就是直接修改地址,所以值变了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 18:24:33 | 显示全部楼层
因为*pa改的是a,*pa就是和a挂钩了,*pa改,a也要改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-9-7 22:21:21 | 显示全部楼层
帮楼主顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-8 20:47:31 | 显示全部楼层
地址没有bian,只是地址里的值变了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-8 20:54:08 | 显示全部楼层
隐袭战龙 发表于 2014-9-7 18:24
因为*pa改的是a,*pa就是和a挂钩了,*pa改,a也要改

是这样的,不过,看了c书籍,我个人的感受是,c的指针是地址指向功能,那么就是复用某个指向的地址功能。感觉指针一直是复用某个最初指向的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-8 22:22:21 | 显示全部楼层
pa = &a;
*pa = 20;
你把a的地址给了pa所以 你给了*pa赋值,所以就相当于给a赋值.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-9 17:12:49 | 显示全部楼层
  来学习额
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-10 20:02:29 | 显示全部楼层
  来学习啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-10 20:23:48 | 显示全部楼层
text6789 发表于 2014-9-5 17:23
,不知道a如何得到20的赋值空间的信息

是这样的,指针指向a嘛,也就是指针的内容存储的就是a的地址。*pa就是在相当于a了。对*pa进行修改,也就是对a进行修改了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 02:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表