自增运算i=1,(i++)+(i++)+(i++)的值与(++i)+(++i)+(++i)的值与运算后的i值各为多少?

发布时间:2024-05-16 05:44 发布:上海旅游网

问题描述:

请给出具体的解答或说明,谢了~~
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]$

热点新闻