我不太理解这段代码的输出结果,请给予解释...
#include<stdio.h>
void main()
{
int x=2,y=5;
x*=y+1;
printf("%d",x);
}
输出结果为12。但根据我的理解,
x*=y+1;
应该是x=x*y+1;
,但根据运算符优先级,应该先计算x*y
,然后再加1,因此结果应该是10+1=11。但实际上是12 — 有人能解释一下吗?我不太理解这段代码的输出结果,请给予解释...
#include<stdio.h>
void main()
{
int x=2,y=5;
x*=y+1;
printf("%d",x);
}
x*=y+1;
应该是x=x*y+1;
,但根据运算符优先级,应该先计算x*y
,然后再加1,因此结果应该是10+1=11。但实际上是12 — 有人能解释一下吗?它将被评估为
x = x * (y + 1);
所以
x = 2 * ( 5 + 1 )
x = 12
这里发生的是程序中操作顺序的问题。
如果你有方程 x*y+1
,它应该是 (x * y) + 1
并得出十一。
但是在编程中,在等号右侧的方程会先被解析,然后再由等号左侧的符号进行修改。 在这个方程中,是乘。
因此,x *= y + 1
实际上是 x = x * (y + 1)
,结果为12。
^ 在这种情况下,星号(*)
将右侧整个方程乘以 x
,然后将 那个 结果分配给 x
。
它被翻译成:x = x*(y+1);
所以很明显它输出12。
x*=y+1; => x = x * (y + 1);
x *= y + 1
的意思是 x = x * (y + 1)
运算符+
的优先级高于运算符*=
。
x*=y;
的作用类似于 x=x*y;
而 x*=(y+1)
的展开形式为 x = x * (y + 1);
在 C 语言中,您可以从 运算符过程 中看到以下内容:
加/减赋值 的优先级低于简单的加操作。
因此,在这里:
x*=y+1;
+
会首先执行。
所以:
x = x * (6)
所以 x = 2 * 6
x = 12;
int main(void)
,而不是void main()
。 - Keith Thompsonprintf()
末尾缺少换行符,这可能是它被运行的地方。是的,应该是int main(void)
,但MS允许使用void main()
。 - Jonathan Lefflervoid main()
是不正确的。它很丑,而且它的母亲给它穿得很滑稽,所有有思想的人都应该避免使用它,但它并不是不正确的。 - Keith Thompson