Не совсем. В исходном вопросе ptr
будет указывать на тот же первый символ, что и hello
, что может не обязательно быть h
. Возможно, вы сделали:
char *hello = "goodbye";
, и в этом случае hello
и ptr
будут указывать на это g
. Однако ваше редактирование теперь дает понять, что вы имели в виду:
char *hello = "hello";
Ваш комментарий к ptr++
правильный. Он будет перемещен ptr
так, чтобы он указывал на следующий символ, и, в соответствии с соглашением об обработке строки C, '\0'
отмечает конец строки.
Утверждение:
*string++ = *s++;
это то, что вы часто видите в коде копирования строк (копирование s
в string
), что-то вроде:
char *mystrcpy (char *d, char *s) {
char *d2 = d;
while (*s != '\0')
*d2++ = *s++;
*d2 = '\0';
return d;
}
В этом случае строка *d2++ = *s++;
означает:
- скопировать символ в
s
в ячейку памяти d2
.
- увеличение
d2
для указания следующего целевого символа.
- увеличение
s
для указания следующего исходного символа.
Другими словами,
*string++ = *s++;
функционально идентичен:
*string = *s;
string++;
s++;