考虑以下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的值会增加,因此当循环中不再初始化j时,j的值可能会增加到5以上,因此o/p应该是一些垃圾值,但不是吗?为什么?
最佳答案
如果您打印其值匹配的数组元素的地址,您可以看到@Marian注释的真实性,即j
在第一次匹配后索引与i
相同的数组。
#include <stdio.h>
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++;
printf ("%p %p\n", (void*)&a[i], (void*)&b[j]); // added a cue
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();
}
程序输出
0018FF2C 0018FF24
0018FF30 0018FF30
0018FF34 0018FF34
0018FF38 0018FF38
0018FF3C 0018FF3C
5->5
2->2
1->1
6->6
3->3
关于c - 为什么在循环中将j初始化为0而不是其递增值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28502808/