как работают char-указатели с циклом while - PullRequest
1 голос
/ 18 июня 2019

В цикле while, когда упоминается *s, это означает значение по адресу, содержащемуся в s, поэтому в первом случае это будет значение 'a',

. Мой вопрос: какБудет ли цикл while проверять это, проверяет ли он значение ASCII символов, чтобы проверить, является ли условие истинным или ложным ... есть другой способ?

main()
{
   char str[] = "abcd" ;
   char *s = str;
   while(*s)
       printf ("%c",*s++) ;
}

Ответы [ 2 ]

3 голосов
/ 18 июня 2019

Когда вы объявляете строковую переменную, такую ​​как

char str[] = "abcd";

, это похоже на объявление str[5] = "abcd\0";

Итак, в вашем цикле while сначала проверяется значение *s, которое'a', что переводится как 97 в таблице ascii.Затем вы печатаете текущее значение внутри указателя * s, а затем увеличиваете указатель на 1, что приводит к следующему символу.Когда вы достигнете \0, цикл завершится, потому что \0 равно 0;

1 голос
/ 18 июня 2019

while(conditon) в коде C / C ++ будет выполняться, если condition != 0

Поскольку это разыменованный символ *, это означает, что это 1-байтовое значение.Диапазон значений от 0 до 255.

Поскольку первое значение равно «a», это означает, что эта таблица будет печатать из значений «a» (61) до «nbsp» (255) после 255, значение char будет переполненов '0' или NULL-символе, в этот момент while(condition) будет иметь значение false и программа завершится.

enter image description here

...