Когда мы нажимаем '\0'
в строке, на которую изначально указывает t
, *s++=*t++
, которая выполняет назначение, также возвращает значение, назначенное позиции, на которую указывает s
или * 1005. *, который оценивается как false
и завершает цикл.
Во втором примере вы явно полагаетесь на тот факт, что присвоение возвращает назначенный символ, в то время как в первом примере неявно используется этот факт (и тот факт, что символ 0
(также написанный '\0'
) считается быть ложным, в то время как все другие символы имеют значение true, поэтому выражение c != '\0'
даст тот же результат, что и c
.