什么';s是C中赋值运算符与相等运算符之间的差值
为什么要打印y的值?我以为x的值被分配给y,但事实并非如此。这是C和其他语言中的预期行为。你的题目也写得不太好。赋值运算符“是”相等运算符,这正是您正在使用的运算符。您可能会对C中的操作顺序感到困惑。在什么';s是C中赋值运算符与相等运算符之间的差值,c,C,为什么要打印y的值?我以为x的值被分配给y,但事实并非如此。这是C和其他语言中的预期行为。你的题目也写得不太好。赋值运算符“是”相等运算符,这正是您正在使用的运算符。您可能会对C中的操作顺序感到困惑。在printf行中,表达式y=x首先出现,结果值(y)用作printf函数中的参数,这就是为什么您会看到yprinted的值。这是C语言的基本原理之一。我建议阅读C语法。根据,赋值表达式的计算结果为赋值后左操作数的值: 6.5.16赋值运算符 (3) 赋值运算符将值存储在由指定的对象中 左操作数。赋
printf
行中,表达式y=x
首先出现,结果值(y
)用作printf
函数中的参数,这就是为什么您会看到y
printed的值。这是C语言的基本原理之一。我建议阅读C语法。根据,赋值表达式的计算结果为赋值后左操作数的值:
6.5.16赋值运算符
(3) 赋值运算符将值存储在由指定的对象中
左操作数。赋值表达式的值为左
赋值后的操作数
因此
y=x
在printf(“%d\n”,y=x)
中,首先让y
接受x
的值,然后计算为y
的(新分配的)值。因此,printf
-语句的输出将是5580
,即x
的值,这是y
的新值。我看不到标题和正文中的问题之间有密切的关系。“相等运算符”(假设您的意思是==
)不会出现。它应该打印x
的值,即5580
,实际上是这样。已尝试,输出:5580。你的意思是“在赋值为x之后的y值”?你知道赋值语句的值就是赋值吗?与相等比较(y==x
)相反,相等比较是0表示false,而不是0表示true。这个问题是一个很好的机会,可以告诉我们,在C语言中,表达式的值是“主要”效果,有些表达式有副作用。在y=x
中,将y
设置为x
的值实际上是副作用,当然这是主要用途。虽然这看起来像是一个技术点,但它教学习者如何思考C语言,从而思考其他具有副作用的表达,然后思考关于副作用和顺序点的规则,等等。
int main(){
int x = 5580, y = 55098;
printf( "%d\n", y = x);
return 0;
}