24小时热门版块排行榜    

查看: 1677  |  回复: 10

MNXYKT

新虫 (初入文坛)

[求助] a=p++和a=(*p)++的区别 已有1人参与

#include  
main()
{
int p,a;
p=6;
a=p++;
printf("%d,%d",a,p);
}
结果是6,7
#include
main()
{int *p,a=4;
p=&a;
*p=6;
a=(*p)++;
printf("%d,%d",a,*p);
}
结果是7,7;
为什么多了指针,a 的结果会不一样,求解答,

发自小木虫Android客户端
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

sspa9999

至尊木虫 (著名写手)


jjdg: 金币+1, 感谢参与 2017-09-15 00:14:36
第二个p指向a,a和*p它们实际上是一个东西

发自小木虫Android客户端
3楼2017-09-10 22:56:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

15212223817

铁杆木虫 (著名写手)


jjdg: 金币+1, 感谢参与 2017-09-15 00:14:28
第一个p是一个自增变量,a=p++表示先把p的值给a然后p再增加一个1个,第二个p表示指针但是分析跟第一个是一样的,第二个结果应该是66。

发自小木虫Android客户端
2楼2017-09-10 22:08:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sspa9999

至尊木虫 (著名写手)

a变成什么,*p也变成一样。反过来也对,*p变了,a也变成一样的值。77是正确答案

发自小木虫Android客户端
4楼2017-09-10 22:59:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

TX灌水员

木虫 (小有名气)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
jjdg: 金币+2, 感谢参与 2017-09-15 00:14:45
这里
p=&a;
a=(*p)++;
等价于
a = a++;
a++的执行是先返回a并赋值给左端,然后执行a的自增,即
a = a;
a++;
5楼2017-09-12 11:37:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

MNXYKT

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by 15212223817 at 2017-09-10 22:08:43
第一个p是一个自增变量,a=p++表示先把p的值给a然后p再增加一个1个,第二个p表示指针但是分析跟第一个是一样的,第二个结果应该是66。

第二个我验证过就是7,7

发自小木虫Android客户端
6楼2017-09-14 10:21:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

15212223817

铁杆木虫 (著名写手)

7楼2017-09-14 11:13:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

15212223817

铁杆木虫 (著名写手)


jjdg: 金币+1, 感谢参与 2017-09-15 00:14:56
8楼2017-09-14 11:20:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

无知进化

新虫 (初入文坛)

后缀++是先用后自增1,这个用是在这一步中,这一步可以理解为到分号结束,所以到分号结束之前都是原值,分号结束到下一步时,值就变成原值加1

发自小木虫Android客户端
9楼2017-09-15 01:34:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

TX灌水员

木虫 (小有名气)

【答案】应助回帖

引用回帖:
5楼: Originally posted by TX灌水员 at 2017-09-12 11:37:55
这里
p=&a;
a=(*p)++;
等价于
a = a++;
a++的执行是先返回a并赋值给左端,然后执行a的自增,即
a = a;
a++;

抱歉,我用的是Java,我发现在C里面好像不是这样,跑出来确实是6,6
10楼2017-09-15 22:35:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 MNXYKT 的主题更新
信息提示
请填处理意见