c语言中 经过以下几个语句为什么 count 这个变量的值是18?
int i=3;int count;count=(++i)+(++i)+(++i);
count 的值不是,应该是15吗?
count=(++i)+(++i)+(++i);语句如何进行编译,C语言标准没有明确规定。
对于该语句,各种编译器具有不同的编译行为。
假设该语句括号内的值分别:①、②、③,(①) + (②) + (③)
有些编译器这么算:先算(++i),i = 4,此时①的值还没算,接着算(++i),i = 5,此时②的值还没算,然后算(++i),i = 6,此时③的值还没算,最后算(++i)+(++i)+(++i),此时①②③的值算出来,① = 6,② = 6,③ = 6,相加,6 + 6 + 6,结果为18。
有些编译器这么算:先算(++i),i = 4,此时①的值还没算,接着算(++i),i = 5,此时②的值还没算,然后算(++i)+(++i),此时①和②的值算出来,① = 5,② = 5,相加,5 + 5,然后再算(++i), i = 6,此时③的值还没算,最后算(++i)+(++i)+(++i),此时③的值算出来,③ = 6,相加,5 + 5 + 6,结果为16。
还有编译器这么算:先算(++i),i = 4,此时①的值已经算出来了,① = 4,接着算(++i),i = 5,此时②的值已经算出来了,② = 5,然后算(++i)+(++i),此时①和②的值加起来,5 + 5,然后再算(++i), i = 6,此时③的值算出来,③ = 6,最后算(++i)+(++i)+(++i),此时①②③的值相加,4 + 5 + 6,结果为15。
有图有真相,三款编译器结果大比拼!
跟运算符运算优先顺序有关吧
c++我试了,结果就是18,小括号有限度最高内部全都先运算结束了才运算括号外的,于是就成了i自加三次,最后成了6+6+6,
i=3;c#我也试过了,结果是15..似乎是从左到右依次运算(但是遇见括号依然优先),于是就成了4+5+6=15。。。。
int k = 3,count;以上调试皆在VS2010平台下调试完成,并且有结果显示
i的初始值是3不是4;