编程论坛
注册
登录
编程论坛
→
数据结构与算法
c语言问题
紫巅之草
发布于 2011-08-28 11:10, 687 次点击
当x=1 (++x)+(++x)+(++x)怎么算这个表达式的值啊????????????
9 回复
#2
QQ346957135
2011-08-28 15:37
从左向右依次进行,x初值为1,经过三个自加变为4。
注:++x意为x=x+1;
#3
pauljames
2011-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
liu1028
2011-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
Hujc71
2011-08-30 16:20
我很郁闷的是明明程序只有一个输出,你怎么能控制x = 4
x1 = 2
x2 = 3
x3 = 4
y1 = 10
y2 = 9这么多的输出?
#7
statics
2011-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
laznrbfe
2011-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
lpvoid
2011-09-02 20:50
的确编译器不同结果就不同吧
1