考虑以下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/

10-11 19:41