A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1312878967 中级黑马   /  2015-8-7 09:45  /  1017 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include “stdio.h”
main(){
int a = 7,b = 9,*p;
p = &a;
*p=*p+b;
printf(“%d,%d\n”,a,*p);


请问大神,输出的结果为什么都是16?????

15 个回复

倒序浏览
本帖最后由 QQ2544 于 2015-8-7 10:18 编辑

因为指针指向了a,所以对a进行操作,进行加7.所以是16啊
回复 使用道具 举报
QQ2544 发表于 2015-8-7 10:02
因为指针指向了a,所以对a进行操作,进行加7.所以是16啊

我的意思是 第一个%d对应的a 是怎么变成16的啊
回复 使用道具 举报
1312878967 发表于 2015-8-7 11:13
我的意思是 第一个%d对应的a 是怎么变成16的啊

因为a已经加7了啊,指针指向了a,对a进行了操作。
回复 使用道具 举报
QQ2544 发表于 2015-8-7 11:28
因为a已经加7了啊,指针指向了a,对a进行了操作。

啊~~~~~还是不太明白 绕不过来了 能不能把代码逐句解释下 谢谢啦
回复 使用道具 举报
QQ2544 发表于 2015-8-7 11:28
因为a已经加7了啊,指针指向了a,对a进行了操作。

我貌似懂了 指针变量p中存放的是a的地址 所以*p是p指向的变量 就是a *p与a等价 对吧 嘻嘻
回复 使用道具 举报
1312878967 发表于 2015-8-7 15:40
啊~~~~~还是不太明白 绕不过来了 能不能把代码逐句解释下 谢谢啦

p = &a;//此处,指针指向a
*p=*p+b;//这里可以认为是a=a+b;
这样比较容易理解
回复 使用道具 举报
1312878967 发表于 2015-8-7 15:54
我貌似懂了 指针变量p中存放的是a的地址 所以*p是p指向的变量 就是a *p与a等价 对吧 嘻嘻 ...

可以这么理解。
回复 使用道具 举报
因为 p 指向 a啊   可以这么说 a==*p  所以对*P操作就 是对a操作
回复 使用道具 举报
没怎么学懂.
回复 使用道具 举报
p 指向 a,  
回复 使用道具 举报
好好理解一下 地址,指针,还有变量值在内存中 所处的位置,这个问题就解决了
回复 使用道具 举报
必须是16啊,*p代表的是a的地址,包含了a的数据,用a的地址去加p所以是16
回复 使用道具 举报
指针变量存储的是变量a的地址,这时候进行运算,赋值运算自右至左运算,等号右边的*p是取值操作,取出变量a地址下的值7,然后和9求和得到16,这时候变量a的值已被修改
回复 使用道具 举报
在大神的指导下 ,已看懂
回复 使用道具 举报
66666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马