gpt4 book ai didi

c - gcc编译器printf执行顺序

转载 作者:行者123 更新时间:2023-11-30 18:19:06 36 4
gpt4 key购买 nike

测试代码如下:

#include <stdio.h>
int addTen(int x, int b[])
{
b[2] = x + b[2];
return b[2];
}
void main(void)
{
int a[3] = {4,5,6};
int i = 2;
printf("%i %i %i \n", a[i], addTen(10,a), a[i]);
}

为什么输出是16,16,6?我知道即使编译器处理从右到左的顺序,如 a[i] <- addTen(10,a) <-a[i]。调用 addTen(10,a) 后,a[i] 已经是 16(而不是 6)。那么为什么输出不是16, 16,16呢?谢谢!

最佳答案

这是未定义的行为,您应该阅读 sequence points 。您正在修改 a 并同时在同一表达式中读取它。

此外,未定义评估顺序。

关于c - gcc编译器printf执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19912485/

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