Давайте немного подробнее остановимся на этом.
Синтаксис while в C означает: «если условное условие истинно, создайте тело; затем, если оно все еще верно, снова выполните тело».
Как отмечает Касабланка, любое значение 0 в C является «ложным»;любое ненулевое значение равно "true".(Стоит подумать, почему они выбрали это; вы можете получить хороший совет, если посмотрите на набор инструкций PDP-11.) Таким образом, вы можете расширить это до
while /* the expression *ptr is nonzero*/)
/* do this */
Выражение *prt
означает простоwhatever is at the address stored in ptr
.
Обычный вид кода, в котором используется этот шаблон, - обработка строк.Скажем, у нас есть
char myString[] = "Hello, world!" ; // remember char myString[] is equivalent
// to char * myString in C
char * ptr = myString; // note ptr points to myString[0]
while(*ptr){
putc(*ptr);
ptr ++;
}
Теперь, пока ptr указывает на символ в строке, он ненулевой, и цикл продолжается.но по соглашению в C все строки заканчиваются NUL, то есть байтом шириной 0. Поэтому, когда цикл достигает этого последнего NUL, * ptr равен 0, и цикл заканчивается.
Вы можете написать егоболее кратко
char * ptr = myString;
while(*ptr) putc(ptr++);
Головоломка: Вы можете написать это еще более кратко?