gpt4 book ai didi

c - 求解复合赋值表达式

转载 作者:行者123 更新时间:2023-12-01 15:54:14 24 4
gpt4 key购买 nike

好的,我知道表达式 (x *= y = z = 4;) 的输出是 40;但是我们到底是怎么得到 40 的呢?你能一步一步告诉我吗?

我以为优先顺序是从右到左所以(2 * 4) = (z =4),没看懂

#include <stdio.h>
#define PRINTX printf("%d\n",x)

int main (void){
int x = 2, y, z;
x *= 3 + 2;
PRINTX;
x *= y = z = 4;
PRINTX;
x = y == z;
PRINTX;
x == ( y = z );
PRINTX;
return 0;
}

最佳答案

不,这里可以计算赋值的唯一方法是从右到左。

首先,请注意 x *= 99x = x * 99 的简写。

话虽如此,

x *= y = z = 4;

相当于

z = 4;
y = z;
x *= y; // This is shorthand for x = x * 4

考虑一下如果您尝试以相反的方式评估它会发生什么:

// y is unininitialized
x *= y;
y = z;
z = 4;

它会失败。

真的,

// x = 2
int x = 2, y, z;
// x = x * (3 + 2) = x * 5 = 2 * 5 = 10
x *= 3 + 2;

// x = x * 4 = 10 * 4 = 40
x *= y = z = 4;

这可以重写为

int x, y, z;
x = 2; // x = 2
x = x * (3 + 2); // This is 2 * 5, so x = 10 after this

z = 4; // z = 4
y = z; // y = 4
x = x * y; // x = 10 * 4 = 40

这就是你最终得到 40 的方式。

关于c - 求解复合赋值表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44212946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com