程序如下:
# include <stdio.h>
int main(void)
{
int i = 3,a;
a = ( ++i ) + ( ++i ) + ( ++i );
printf("%d %d\n",a,i);
return 22;
}
运行结果是"16 6".
但我得出的结果是"18 6".
具体分析如下:
i的值增加了3次,当然是6无疑。
关键是a的值,为此我专门写了2种不同的代码做实验,目的是为了找到( ++i )里的运算结果是什么。上代码:
# include <stdio.h>
int main(void)
{
int i = 3,a;
printf("%d",++(++i));
return 654;
}
输出的值是5.
而第二个代码是:
# include <stdio.h>
int main(void)
{
int i = 3,a;
printf("%d",++4);
return 654;
}
这个程序不能运行。因为众所周知,常量是不可以再自增的。对比两个程序可以发现,
( ++i )的运算结果不是一个常量,那就应该是一个变量。我想这个变量自然是i,只不过他的值增加了1.
这样继续,回到原题。
a = ( ++i ) + ( ++i ) + ( ++i );
这样有了以上的依据,就开始解题。根据优先级和结合性,先算第一个括号的表达式,结果为i,i的值变成了4.
然后再算第二个括号的表达式,结果同样为i,i的值变成了5.
然后再算第三个括号的表达式,结果同样为i,i的值变成了6.
这样就变成了:i+i+i;i的值为6,也就是6 * 3 =18.也就是我一开始说的结果。
但编译器运行的结果是16 6.这让我感到很费解,请各种大牛帮我点明线索,拜谢
# include <stdio.h>
int main(void)
{
int i = 3,a;
a = ( ++i ) + ( ++i ) + ( ++i );
printf("%d %d\n",a,i);
return 22;
}
运行结果是"16 6".
但我得出的结果是"18 6".
具体分析如下:
i的值增加了3次,当然是6无疑。
关键是a的值,为此我专门写了2种不同的代码做实验,目的是为了找到( ++i )里的运算结果是什么。上代码:
# include <stdio.h>
int main(void)
{
int i = 3,a;
printf("%d",++(++i));
return 654;
}
输出的值是5.
而第二个代码是:
# include <stdio.h>
int main(void)
{
int i = 3,a;
printf("%d",++4);
return 654;
}
这个程序不能运行。因为众所周知,常量是不可以再自增的。对比两个程序可以发现,
( ++i )的运算结果不是一个常量,那就应该是一个变量。我想这个变量自然是i,只不过他的值增加了1.
这样继续,回到原题。
a = ( ++i ) + ( ++i ) + ( ++i );
这样有了以上的依据,就开始解题。根据优先级和结合性,先算第一个括号的表达式,结果为i,i的值变成了4.
然后再算第二个括号的表达式,结果同样为i,i的值变成了5.
然后再算第三个括号的表达式,结果同样为i,i的值变成了6.
这样就变成了:i+i+i;i的值为6,也就是6 * 3 =18.也就是我一开始说的结果。
但编译器运行的结果是16 6.这让我感到很费解,请各种大牛帮我点明线索,拜谢

