请解释一下此代码的结果。
//代码a 当我在笔记本电脑上运行此代码时,y的值为4.我认为,y的逻辑值应为5,因为通过执行x ++它应该返回2而不增加,因为它是后增量然后当我们添加x时,它现在包含根据我的说法,增加的值即3.所以2 + 3是5。但根据我的turbo c ++ 3.0,答案是4。
#include <stdio.h>
void main()
{
int x = 2,y;
**int y = x++ + x;** // ans 4
printf("y is :%d", y);
}
//代码B. 当我运行这段代码时,答案是6.这里的turbo c ++ 3.0 in ++ x正在增加x ++的递增值,这与上面提到的代码相反。从逻辑上讲,这里的答案是正确的但在上面的代码中却没有 #include
void main()
{
int x = 2,y;
**int y = x++ + ++x;** //and 6
printf("y is :%d", y);
}
答案 0 :(得分:0)
结果为4的第一个程序
#include <stdio.h>
void main() {
int x = 2,y;
**int y = x++ + x; // x=2, so y=2+2=4
printf("y is :%d", y); // after post increment x=3
}
由于变量仅在语句执行完成后才获得增量值,因此y = 2 + 2
结果为6的第二个程序。
++运算符的相关性是“从右到左”
void main() {
int x = 2,y;
**int y = x++ + ++x; //Since associativity is left to right so y=3+3=6
printf("y is :%d", y);// after the post increment x=4
}
这里首先执行预增量,因为相关性规则因此y = 3 + 3
答案 1 :(得分:0)
首先,=
的赋值运算符从右到左工作,这意味着如果编写x = 2 + 4 + 1;
,编译器就会从最右边的数字1
开始读取它,然后添加{{ 1}}等等,然后将该值分配给4
。
因此,在你的case语句中x
编译器从右边开始看到它y = x++ + x;
即x
然后看2
即x++
}因为它是后增量运算符,最后它会添加它们并将2
指定为y
2 + 2
。
在第二种情况下,即4
,编译器首先查看y = x++ + ++x;
,因为它是预增量运算符,它会增加++x
一个,即x
现在x
。之后看到3
并且如上所述,因为它是post运算符,在此操作中它将被视为x++
,并且该值为x
(请记住我们增加了3
之前,编译器将x
即3 + 3
分配给6
。