问题描述:
请给出具体的解答或说明,谢了~~
trube c
问题解答:
表达式中出现的i++是计算完本次表达式i的值才自加,并不影响本次表达式计算,所以第一个(i++)+(i++)+(i++)的值就是i+i+i的值也就是1+1+1=3;
表达式中出现的++i的意思的i的值先自加再参与运算,所以这里的自加就会影响到本次表达式的计算,
(++i)+(++i)+(++i)的值也就相当于(i+i)+(i+i)+(i+i)=(1+1)+(1+1)+(1+1)=6
int i=1;
(i++)+(i++)+(i++)
等效于
先算i+i+i=3,然后i++3次,所以(i++)+(i++)+(i++)的值是3,运算完i=4
(++i)+(++i)+(++i)
等效于
先做一个++i,结果为2,存进a
再做一次++i,结果为3,存进b
再做一次++i,结果为4,存进c
最后(++i)+(++i)+(++i) = a+b+c = 2+3+4 = 9
但是实际运行结果是10...这个其实取决于编译器....确实这种写法很找抽的...不同编译器可能会有不同结果...
int i=1;
(i++)+(i++)+(i++)
等效于
先算i+i+i=3,然后i++3次,所以(i++)+(i++)+(i++)的值是3,运算完i=4
(++i)+(++i)+(++i)
等效于
先做一个++i,结果为2,存进a
再做一次++i,结果为3,存进b
再做一次++i,结果为4,存进c
最后(++i)+(++i)+(++i) = a+b+c = 2+3+4 = 9
1+1+1=3,i=4;2+3+4=9,i=4
但VC++实际结果是10,可能tubeC结果会不一样,这和编译器有关
每天都可以看到的欠抽题。
好吧,证明一下楼上的解答是错误的。
[14:31:00@~/c-cpp]$ cat a.c
#include <stdio.h>
int main()
{
int i;
i = 1;
int j = (i++)+(i++)+(i++);
printf("%d %d\n", i, j);
i = 1;
int k = (++i)+(++i)+(++i);
printf("%d %d\n", i, k);
return 0;
}
[14:31:15@~/c-cpp]$ gcc a.c
[14:31:16@~/c-cpp]$ ./a.out
4 3
4 10
[14:31:17@~/c-cpp]$