解释一下:y=(*p--)++;执行顺序
c语言吧
全部回复
仅看楼主
level 6
lx376693576 楼主
int a[]={5,8};
int * p,y;
p=&a[1];
y=(*p--)++;
求解释y=(*p--)++;的执行顺序。
2012年10月18日 09点10分 1
level 4
你是不是想问*和--的优先级谁更高
2012年10月18日 09点10分 4
不是...由于*p--是先取值再--。在把*p赋给y之后的运算顺序我就糊涂了。
2012年10月18日 09点10分
回复 lx376693576 :为什么是先取值呢?
2012年10月18日 10点10分
我可以明确的告诉你,你的理解从一开始就错了
2012年10月18日 10点10分
回复 eidjcb10 :y=*p--,不就是先把*p的值赋给y,然后再执行自减运算么..
2012年10月18日 10点10分
level 8
p-- * ++括号最高优先级,自减比*优先级高
2012年10月18日 09点10分 5
可是这个是先取值,再--。 先把*p赋给y,接下来我就搞不懂了。运行结果是:a[0]==5,a[1]==9,p最终指向a[0]的地址。 这表明赋值给y后,执行了p--,然后又执行(*p)++,这样a[0]应该==6,a[1]==8才对啊。
2012年10月18日 09点10分
level 8
结果应该是6
2012年10月18日 09点10分 6
结果是8
2012年10月18日 09点10分
y的结果
2012年10月18日 09点10分
用VC6.0运行的。最终y==8,a[0]==5.a[1]==9. 就不理解为什么a[1]==9.
2012年10月18日 09点10分
回复 lx376693576 :++作用于数组的第二个元素 --作用于指针p *作用于指向数组第二个元素的指针
2012年10月19日 02点10分
level 14
y=*p;
p--;
*p = *p + 1;
2012年10月18日 09点10分 7
p--,就让p指向了a[0]. *p = *p + 1;就应该是a[0]=a[0]+1. 最终a[0]=6,a[1]=8. 可是运行结果居然是a[0]=5,a[1]=9啊...
2012年10月18日 09点10分
回复 lx376693576 :好吧,这么看我也不知道为什么先执行了(*p)++,再p--了。所以我猜测这可能是个未定义行为?得查下标准……不过这么奇怪的表达式有何意义么
2012年10月18日 10点10分
回复 怪兽大战魔人 :这个表达式的意义在于高玩们拿来**考新手,想弄懂具体过程你可以查看汇编代码
2012年10月18日 10点10分
回复 怪兽大战魔人 :课堂上老师出的题 [揉脸]
2012年10月18日 10点10分
level 10

y=(*(p--))++;这样你就知道了吧
2012年10月18日 10点10分 10
level 10
首先计算p--的值是&a[1],,然后相当于计算*&a[1]的值, 就是a[1],然后计算(a[1])++,值为8,a[1]的值变为9
2012年10月18日 10点10分 11
懂了,总之把p的值拿出来,执行++是最初的(*p)在++,,执行--也是原先的(*p)再--。 非常感谢。
2012年10月19日 04点10分
回复 lx376693576 :[呵呵]
2012年10月19日 04点10分
level 11
[汗] (*p--)++; 当这个表达式执行完毕,p才减1 也就是说,p还是指向a[1] 所以,执行完毕,(*p--)++ 那么,a[1]的值又自增1.
2012年10月18日 12点10分 13
好吧,懂起了...谢谢[Yeah]
2012年10月19日 04点10分
level 7
建议
lz
以后不要这样写,这个会根据编译器的不同结果也不样
2012年10月18日 12点10分 14
呵呵
2012年10月18日 13点10分
不会 这个不是未定义行为 有唯一结果
2012年10月19日 02点10分
这个表达式没有"副作用",结果唯一
2012年10月19日 06点10分
level 7
写出这种无意义的复杂的难理解的代码的程序员都应该拖出去枪毙
2012年10月19日 04点10分 16
[揉脸]这是老师出的题,专门来测试我们智商呢
2012年10月19日 04点10分
level 12
[汗]*p最先执行
2012年10月19日 04点10分 17
level 8
写个完整的程序出来运行一下不就知道了
2012年10月19日 06点10分 18
1