gpt4 book ai didi

c - for循环之谜

转载 作者:行者123 更新时间:2023-12-04 10:36:15 26 4
gpt4 key购买 nike

关于 for 循环,我一直深陷其中。

    int abc[3], i, j;
for(j=0; j<3; j++);
printf("%d\n", j);
abc[j] = abc[j] + 3;
printf("%d \n", j);


Output:

3
6

输出应该是 3,3,因为我没有改变 j 的值。

将 3 添加到 abc 的第 j 个值会导致 j 的值改变 3。这仅在退出 for 循环然后尝试更改 abc[j] 的值时发生。

也许我遗漏了一些非常明显的东西。任何帮助将不胜感激。

最佳答案

自从您声明数组的大小为 3 int abc[3]; 后,您就发生了缓冲区溢出,但您正在索引第 4 个元素;这是未定义的行为

abc[j] = abc[j] + 3; // j = 3 here, overflow

您最有可能看到的是 j 位于数组 abc 之后的堆栈中,因此当您溢出数组 abc [3],你实际上是在修改包含j的内存。

*请注意,C 标准中没有任何地方提到 stack 这个词,这是一个实现细节,可能会因系统而异。这就是为什么它是未定义行为的部分原因,并且您从人们那里得到的反馈是他们看到两个 3 作为输出。

关于c - for循环之谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4859827/

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