下面程序的执行结果是什么?
int main()
{
int i = 10;
i = (i++) + 8;
printf ("i=%d", i);
return 0;
}
结果是19。
为什么呢?这与i++的性质有关。当前的表达式中使用的是i的值,执行完当前表达式后,会把i加1。所以"i = (i++) + 8;"可表达为下面的形式:
i = i + 8;
i++;
所以i的值为18。
再看看下面的程序:
int main()
{
static int i = 10;
i = (i++) + 8;
printf ("i=%d", i);
return 0;
}
结果是什么?好像应该也是19。
有可能,但不一定。在vc上测试结果是19,在gcc上的测试结果是11。
奇怪吧,呵呵.
我的理解是gcc有问题,static只是说明变量的特性,但数据操作方式应该是一致的。
不过这不是关键,关键是要说明编程时不要使用复杂的语法,各种编译器对常用语法的解释是一样的,但对于某些不常用的语法,解释并不一定一致。
阅读(2611) | 评论(4) | 转发(0) |