Для чего нужно обнулить массивы после объявления и константы.
#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.
Комментариев нет:
Отправить комментарий