переменная часового типа с оператором постинкремента - PullRequest
2 голосов
/ 01 мая 2019

в чем разница между:

while(*s++ != '\0') {}

и

while(*s != '\0') {
   s++;
}

s является char *.Последний работает хорошо.но в конце первого цикла *s не равно '\0'.

1 Ответ

4 голосов
/ 01 мая 2019

В случае

 while(*s++ != '\0') {}

инкремент выполняется как оператор постинкремента в самом операторе проверки условий. В этом случае изменение значения (приращение) является побочным эффектом после вычисления значения для оператора. Таким образом, после использования значения (для сравнения) s увеличивается.

С другой стороны,

while(*s != '\0') {
   s++;
}

инкремент выполняется как постинкремент внутри условного блока, который будет выполняться, только если условие TRUTHY. Как только условие оценивается как ложное, s не увеличивается.

...