注册 登录
编程论坛 数据结构与算法

c语言问题

紫巅之草 发布于 2011-08-28 11:10, 687 次点击
当x=1 (++x)+(++x)+(++x)怎么算这个表达式的值啊????????????
9 回复
#2
QQ3469571352011-08-28 15:37
从左向右依次进行,x初值为1,经过三个自加变为4。
注:++x意为x=x+1;
#3
pauljames2011-08-28 19:26
先增值,后引用。但是结果有点奇怪。我在gcc下面编译输出如下:
#include <stdio.h>
int main(void)
{
    int x=1,x1,x2,x3,y1=0,y2=0;
    x1=++x;
    x2=++x;
    x3=++x;
    x=1;
    y1=(++x)+(++x)+(++x);
    y2=x1+x2+x3;
    printf("(++x)+(++x)+(++x)=%d\n",(++x)+(++x)+(++x));
    return 0;
}
x = 4
x1 = 2
x2 = 3
x3 = 4
y1 = 10
y2 = 9

#4
liu10282011-08-28 22:32
先括号里,后依次运算。
#include <stdio.h>
int main
{
    int x=1,p;
    p=(++x)+(++x)+(++x);
    printf("(%d\n",p);
    return 0;
}
#5
怎么会这样子2011-08-29 09:32
回复 3楼 pauljames
y1为什么是10呢?不是9?
#6
Hujc712011-08-30 16:20
我很郁闷的是明明程序只有一个输出,你怎么能控制x = 4
x1 = 2
x2 = 3
x3 = 4
y1 = 10
y2 = 9这么多的输出?
#7
statics2011-08-31 11:12
编译器不同结果就不同啊,vc上结果:
int x=1,y=0;
y =(++x)+(++x)+(++x);
可以理解为这样执行的:
int x=1,a=0,b=0,c=0,y=0;
a = a+1;//2=>第一个++x
b = a+1;//3=>第二个++x
y = b+b;//6=>y =(++x)+(++x)
c = b+1;//4=>第三个++x
y = y+c;//y=b+b+c;//10=>y =(++x)+(++x)+(++x);


[ 本帖最后由 statics 于 2011-8-31 11:15 编辑 ]
#8
laznrbfe2011-09-02 00:16
注意‘+’加号是双目运算
程序代码:
#include <stdio.h>
int main(void)
{
    int x,y1=0,y2=0;
    x=1;
    y1=(++x)+(++x);
    printf("x=%d,y1=(++x)+(++x)=%d\n\n",x,y1);
   
    x=1;
    y2=(++x)+(++x)+(++x);
    printf("x=%d,y2=(++x)+(++x)+(++x)=%d\n\n",x,y2);
    return 0;
}
x=3,y1=(++x)+(++x)=6
x=4,y1=(++x)+(++x)+(++x)=10


7楼讲得不错。
#9
lpvoid2011-09-02 20:50
的确编译器不同结果就不同吧
1