gpt4 book ai didi

c - 为什么 j 在循环中被初始化为 0 而不是它的增量值?

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:58 25 4
gpt4 key购买 nike

考虑以下 C 代码:

int main()
{
int a[5] = {5, 2, 1, 6, 3}, b[5] = {1, 6, 3, 2, 5}, c[10], i = 0, j = 0, k = 0;
for (i = 0 ; i < 5 ; i++)
{
while (a[i] != b[j])
j++;
c[k] = a[i];
c[k+1] = b[j];
k = k + 2;
}
for (i = 0 ; i < 10 ; i += 2)
printf("%d->%d\n", c[i], c[i + 1]);
getch();
}

程序打印两个相同的数字,每个数字从 a[5] 和 b[5] 中选择

Q:j 只初始化一次,在循环中 j 的值递增,因此它可能会递增超过 5,因为在循环内不再对 j 进行初始化,因此 o/p 应该是一些垃圾值,但事实并非如此?为什么?

最佳答案

j 在进入第一个 for 循环时包含 0。当退出 while 循环时它变为 4,因为只有这样条件 a[i] != b[j] 才会为假。

然后,在第一个 for 循环的下一次迭代中,j 递增,您尝试读取数组 (b[5],b[6] 等),这会调用 Undefined Behavior这意味着任何事情都有可能发生。

它完美运行的原因完全是运气。但是你不能依赖这个。

关于c - 为什么 j 在循环中被初始化为 0 而不是它的增量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28502808/

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