Страницы

Поиск по вопросам

среда, 17 октября 2018 г.

Зачем нужно обнуление переменных?

Для чего нужно обнулить массивы после объявления и константы. #include
main() { int c, i, nwhite, nother; int ndigit[10];
nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0;
while ((c = getchar()) != EOF) if (c >= '0' && c <= '9') ++ndigit[c - '0']; else if (c == ' ' || c == 'n' || c == 't') ++nwhite; else ++nother;
printf("digits="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf("white space = %d, other =%dn", nwhite, nother); } Дело в том, что не могу никак для себя пояснить вот этот момент for (i = 0; i < 10; ++i) ndigit[i] = 0; Для чего мы пересчитываем ячейчки массива от 1 до 10, а затем еще их обнуляем? И разве не надо было объявить массив на 11 переменных, так как одна ячейка зарезервирована под ноль? Сама программа взята из Кернигана и Ричи и занимается подсчетом цифр.


Ответ

gecube верно говорит в комментарии, С это не C# и Java, никто кроме вас не будет обнулять значения в массиве. Когда вы выделяете память под массив, то вы выделяете просто диапазон адресов, а что было(что находится) в этих ячейках памяти никто не знает, никто не знает, что за программа использовала этот участок памяти до этого. В этом коде обнуление проводится для того, чтобы вести подсчет повторений каждой цифры в веденной строке, т.е. на выходе в ndigit[3] будет количество троек в ndigit[6] количество шестерок. Обнулять нужно из-за этой конструкции ++ndigit[c - '0']; чтобы не было какого-нибудь -3267.

Комментариев нет:

Отправить комментарий