请问C语言中k = i +++j;这个语句从优先级和结合性该如何分析,到底是i自加还是j自加,为什么?请详细一些

如题所述

从理论上讲,++的优先级高于+
而且,C中运算表达式一般运算顺序为从左到右
所以,
k = i +++j;
的运算顺序为 :
i + j 结果保存临时位置

i++
k= 原i+j

以下为测试程序:
#include <stdio.h>

int main()
{
int i=1,j=2,k;
k=i+++j ;
printf("k=%d\n",k );
printf("i=%d\n",i );
printf("j=%d\n",j );
return 0;
}
k=3
i=2
j=2
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-17
i自加 相当于(i++)+j
因为C/C++编译器在遇到符号时,总是一直将相邻的下一个操作符纳入当前解释的表达式中,也就是说解析字符串时总是向后寻找可能的有意义的串,除非新加入的操作符会使原本成立的表达式变成非法结果。如果你看懂了,试试解释复杂一点的 k=++i+++j++ 即 k=(++(i++))+(j++)追问

你前面说的很有道理,但后面那个k=++i+++j++;我在VS2008上编译了一下出现语法错误,提示“++需要左值“,j = ++i++;是不对的。。

追答

哦 对,忘了这点(随便写的...) 确实是这样的。。

相似回答