本帖最后由 星河鹭起 于 2014-4-15 22:07 编辑
今天在论坛上看到一片帖子,关于以下程序结果为什么是36,帖子地址为:http://bbs.itheima.com/thread-114278-1-1.html
其中有位同学也回答了,但是我一直想不明白,而且我用VC和linux都试了,结果都是42.
程序如下:
#include<stdio.h>
int fun(int x,int y){
return x*y;
}
int main(void){
int k=5;
printf("%d",fun(k++,++k));
return 0;
}
后来在MJ学习IOS的3群跟一位基友探讨了下,我觉得结果应该还是42,分析如下,如有错误的地方还请大神们指正,嘿嘿:
首先,参考百度百科关于算术优先级 http://baike.baidu.com/link?url=SiCLO7NMm99llCQ3YU4jKyTo3m-pr-mGg6uoMBl739J8E3Jag0jyumwaXC8cCCZ-。按照C语言的规则,++优先级高于*,并且++是从右到左开始运算。
因此我认为程序中调用fun函数时,先运算k++和++k,最后才返回x*y,由于从右往左,因此先运算++k,结果为6,然后再运行k++,因为++的优先级高于*,因此这时候k++结果还是会加1,变成了7,最终的结果就是返回6*7,结果是42;我觉得并不是36.
如果有不对的地方,还请各位大神指正,非常感谢。:D |