首页 > 解决方案 > 局部变量正在修改不相关变量的值

问题描述

我一直在使用一些代码将成员添加到一个数组中,当我尝试对代码进行一些更改时,我意识到预期的输出不正确(修改后的数组没有显示出来)。调试我看到将 声明int i为全局变量而不是在for循环中执行预期的输出。

但是,我发现问题与变量有关,n因为某种原因是while (j >= k)在变量int i被声明为for循环的初始化时进行了修改;但我无法弄清楚为什么会这样。如果有人可以帮助我了解这是什么以及为什么会发生这种情况,我将非常感激

这是我的代码,它执行预期的输出:

#include <stdio.h>

int main() {
    int LA[] = {1,3,5,7,8};
    int item = 10, k = 3, n = sizeof(LA)/sizeof(LA[0]);
    int j = n;
    int i;

    printf("n  = %d\n",n);
    printf("The original array elements are :\n");

    for(i = 0; i<n; i++) {
        printf("LA[%d] = %d \n", i, LA[i]);
    }
    printf("n  = %d\n",n);
    n = n + 1;
    printf("n  = %d\n",n);
    while( j >= k) {
        LA[j+1] = LA[j];
        j = j - 1;
    }
    printf("n  = %d\n",n);
    LA[k] = item;

    printf("The array elements after insertion :\n");
    printf("n = %d\n",n);
    for(i = 0; i<n; i++) {
        printf("LA[%d] = %d \n", i, LA[i]);
    }
}

这是我的预期输出:

n  = 5
The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
n  = 5
n  = 6
n  = 6
The array elements after insertion :
n = 6
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 10
LA[4] = 7
LA[5] = 8

这是我的代码,它不是预期的输出:

#include <stdio.h>

int main() {
    int LA[] = {1,3,5,7,8};
    int item = 10, k = 3, n = sizeof(LA)/sizeof(LA[0]);
    int j = n;

    printf("n  = %d\n",n);
    printf("The original array elements are :\n");

    for(int i = 0; i<n; i++) {
        printf("LA[%d] = %d \n", i, LA[i]);
    }
    printf("n  = %d\n",n);
    n = n + 1;
    printf("n  = %d\n",n);
    while( j >= k) {
        LA[j+1] = LA[j];
        j = j - 1;
    }
    printf("n  = %d\n",n);
    LA[k] = item;

    printf("The array elements after insertion :\n");
    printf("n = %d\n",n);
    for(int i = 0; i<n; i++) {
        printf("LA[%d] = %d \n", i, LA[i]);
    }
}

这是我意想不到的输出:

n  = 5
The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
n  = 5
n  = 6
n  = 0
The array elements after insertion :
n = 0

为什么n根据 的声明修改变量int i

标签: cmemoryoverflow

解决方案


推荐阅读