C中的n++,++n问题

稍微接触过代码的人,都不会对n++,++n感到陌生,他们直接的区别无非是先执行后赋值,还是先赋值再执行,直接来看个简单的例子就能明白。

#include 
void main (void)
{
    int x, y,i,k;
    x = 5;
    i = 5;
    k = x++;
    y = ++i;
    printf("k is %d, y is %d\n",k,y);
	//输出结果为,k=5,y=6
}

由此可以得知++n是先加1后执行语句,但就是这么熟悉简单的规则,会让他成为了你最熟悉的陌生人,来看看下面的结果是什么?

#include 
void main (void)
{
    int x, y,i,k;
    x = 5;
    i = 5;
    k = x++ + x++ + x++;
    y = ++i + ++i + ++i;
    printf("k is %d, y is %d\n",k,y);
}

是k=15,y=24吗,恭喜你理解了先加后执行的本质,但是答案不是你想的那样,这里诡异的地方在于存在了两个前置的++,++,在++j + ++j + ++j;中,因为存在两个同级的+运算,根据+运算符的左结合性,在编译时,其实是先处理前面的(++j + ++j)这部分,然后再将此结果再和++j相加。也就是说它先把5加到了7,也就是7+7+8=22,是不是很诧异,但现实就是这么残酷,当然这只是适用于C的编程环境。

参考分析

你可能感兴趣的:(C中的n++,++n问题)