Локальная переменная изменяет значение несвязанной переменной - PullRequest
0 голосов
/ 25 октября 2018

Я работал с небольшим кодом для добавления члена в один массив, когда я попытался внести некоторые изменения в код, я понял, что ожидаемый результат был неправильным (измененный массив не отображается).Отладка Я увидел, что объявление 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...