У меня есть эта крошечная программа, которую я написал для упражнения с указателями C. Я просто беру массив символов и печатаю его в обратном порядке с помощью указателя. Оно работает. Однако я не понимаю, почему это работает. Поскольку я начинаю цикл for в элементе 9, не должен ли он печатать 5 неопределенных элементов (обычно случайных символов нежелательной почты, по моему опыту), прежде чем он попадет в «sdrow»? Я чувствую, что должен фильтровать выход больше.C - Печать неопределенных элементов массива не дает мне мусора
int main(void)
{
char sentence[10] = "words";
char *ptr = sentence;
for(int i=9;i>=0;i--)
{
printf("%c", *(ptr+i));
}
puts("");
return 0;
}
Выход:
sdrow
Как вы узнали бы «неопределенный элемент», если бы встретили его на улице? –
Несколько советов: вместо 'printf («% c », c)', вы можете использовать 'fputc (c, stdout)', а вместо 'puts (" ")' вы могли бы использовать 'fputc ('\ n ', stdout) '. Замены проще и более прямо выражают, что вы хотите напечатать символ. Первый случай избегает синтаксического разбора строки формата, когда вы уже знаете ответ статически. –
@Kerrek SB Хороший компилятор будет генерировать один и тот же код с помощью 'printf ("% c ", c);', а также 'fputc (c, stdout);', а также 'puts (" "); 'fputc ('\ n', stdout);'. Лучше всего использовать контекст и стиль. – chux