*s
и s[0]
- это одно и то же, если это поможет.В этом случае это буква h
, которая будет отображаться до тех пор, пока не будет изменена s
.(h
не следует изменять, и, в зависимости от вашей реализации C, может быть невозможно изменить, потому что "house"
- это константный строковый литерал.)
Если он используется в контексте, которыйожидает, что char *
, s
- это целая строка.Но важно помнить, что он не является константой, хотя на что он изначально указывает.
В отличие от этого,
char c[] = "house";
объявляет и инициализирует c
неизменнымзначение.Вы можете добавить ключевое слово const
, чтобы сделать это более понятным, но это было бы просто украшением.Поскольку он инициализируется в скобках, его значение в смысле указателя не может быть изменено, а поскольку его начальное значение также является константой, его нельзя изменить.Обратите внимание, что вы можете уйти только без указания длины для массива из-за присваивания литерала - компилятор может сказать, что это массив из 6 символов из-за длины литерала.Если бы вы действительно указали его длину, он не был бы неизменным без ключевого слова const
.