gpt4 book ai didi

c - 棘手的表达式评估

转载 作者:行者123 更新时间:2023-12-01 19:37:52 25 4
gpt4 key购买 nike

我有这个代码:

  int main()
{
int a=1,b=2,c=3;
printf("%d\n",a+=(a+=3,5,a));


return 0;
}

结果打印8。这怎么可能?

第1步中,取出a+=3后,a=a+3变为a=4

在第 2 步中,a+=(a+=3) 我到达了 a=a+(4),因此 a=4+4=8 。这样移动我没有成功使 a+=(a+=3,5,a)等于 8。

最佳答案

逗号运算符既是一个序列点,又定义了求值顺序(如 C 规范第 6.5.17 节中所述)。该运算符计算左侧操作数,然后计算右侧操作数并生成右侧操作数的值。

让我们来分解一下:

(a+=3,5,a)

这会将 a 加 3,然后得出右手的值,即:

5, a

它将把 5 评估为 5,然后丢弃它。然后它将评估 a,然后产生值 a(即 4)。剩下的就变成了:

a+=4

将 4 添加到 a,然后生成 a 的新值,即 8。

注意:这可能是未定义的行为,请参阅下面 Vlad 的回答。

关于c - 棘手的表达式评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27215686/

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