Мой плохой! Я предположил, что следующий отрывок из печально известной, но дико популярной книги полностью действителен . Но только сегодня мне было указано, что он ездил с UB (хотя я еще не нашел, как это происходит). Вот этот конкретный раздел из книги. Вы будете делать мне и многим другим «жертвам», как я отличный если вы можете указать в нумерованном порядке, что не так, или UB с каждым конкретным заявлением, и соответствующие исправления для них.Что не так в этих 5 бесчисленных способах декларирования/инициализации постоянных указателей? (Взято из сомнительной, но популярной книги)
char *p = "Hello" ; /* pointer is variable, so is string */
*p = 'M' ; /* works */
p = "Bye" ; /* works */
const char *q = "Hello" ; /* string is fixed pointer is not */
*q = 'M' ; /* error */
q = "Bye" ; /* works */
char const *s = "Hello" ; /* string is fixed pointer is not */
*s = 'M' ; /* error */
s = "Bye" ; /* works */
char * const t = "Hello" ; /* pointer is fixed string is not */
*t = 'M' ; /* works */
t = "Bye" ; /* error */
const char * const u = "Hello" ; /* string is fixed so is pointer */
*u = 'M' ; /* error */
u = "Bye" ; /* error */
'символ * p' должен указывать на неконстантного строки. Строковые литералы - это константы. – Elazar
Приведенные выше случаи 'q' и' s 'идентичны. 'const char *' и 'char const *' являются одним и тем же типом. – Mat
@mat Мне и другим нравится мне настоящая услуга. Потратьте минутку, чтобы опубликовать подробный ответ. –