Не понимаю вывод этой программы на C - PullRequest
5 голосов
/ 22 сентября 2011

Вот код:

#include <stdio.h>

int main (void)
{
    int value[10];
    int index;

    value[0] = 197;
    value[2] = -100;
    value[5] = 350;
    value[3] = value[0] + value[5];
    value[9] = value[5] / 10;
    --value[2];

    for(index = 0; index < 10; ++index)
        printf("value[%i] = %i\n", index, value[index]);
    return 0;
}

Вот вывод при компиляции:

value[0] = 197
value[1] = 0
value[2] = -101
value[3] = 547
value[4] = 0
value[5] = 350
value[6] = 0
value[7] = 0
value[8] = 1784505816
value[9] = 35

Я не понимаю, почему значение [8] возвращает 1784505816? Разве значение [8] не должно быть = значение [6] = значение [7] = 0? Кстати, я компилирую код через gcc под Mac OS X Lion.

Ответы [ 2 ]

20 голосов
/ 22 сентября 2011

value[8] никогда не инициализировалось, поэтому его содержимое не определено и может быть любым.

То же самое относится к value[1], value[4], value[6] и value[7]. Но они просто оказались равны нулю.

6 голосов
/ 22 сентября 2011

Объекты с автоматической продолжительностью хранения, объявленные без инициализатора, имеют неопределенные значения, пока они не будут назначены. Технически это заставляет неопределенное поведение использовать значение (например, print int) объекта, который имеет неопределенное значение.

Если вы хотите, чтобы массив был инициализирован нулем, вам нужно предоставить инициализатор. Э.Г.

int value[10] = {0};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...