c - 在这里打印输出++*p的值应该是多少?
本文介绍了c - 在这里打印输出++*p的值应该是多少?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
#include <stdio.h>
int main(void)
{
int a=3,*p=&a;
printf("++*p=%d,(*p)++=%d",++*p,(*p)++);
return 0;
}
我觉得执行结果应该是++p=4,(p)++=3
因为先取p 再自加 再打印输出,请问为什么输出结果是++p=5
解决方案
不知道题主使用的是哪个编译器。但是如果楼主使用的是 vc6 的话,可能就没有这个问题了。因为用 vc6 来编译执行这段代码,输出的结果和题主的预期是一致的:++*p=4,(*p)++=3
。如下图:
如果楼主使用是其它编译器得到的结果 可能就不一样了,比如在此我用 gcc
编译运行的结果为: ++*p=5,(*p)++=3
。 如下图:
之所以出现这个差异不是编译器的问题,而是函数的参数求值顺序在 c 语言标准中是 未定义 的。所谓 未定义 就是:标准并没有规定编译器一定要以某种特定的顺序来对函数参数进行求值。所以导致了此类代码在不同的编译器上可能有不同的表现(上面的两张图片就是证明)。实际开发应该避免写类似的代码。
建议题主不要在这个问题上花费太多时间,感觉意义不大,因为这个问题本身就没有正确答案,强行解释某个答案除了会让自己更加苦恼外真的没有其他好处了。这里只要记住这种行为是未定义就行了。 把宝贵的时间用在更有意义的事情上吧。
参考:
c / c++ 函数参数求值顺序 ?
function parameter evaluation order
Why are these constructs (using ++) undefined behavior?
这篇关于c - 在这里打印输出++*p的值应该是多少?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文