Указатель - это в основном то, что предполагает его имя.Переменная-указатель, например, только str1 указывает на & st1 [0].
*str1 -> &str1[0]
str2 = str1
Это заставляет str2 также указывать на & str1 [0].Но он просто указывает на этот адрес памяти.Поэтому, когда вы пишете
str2 = "Bad"
«Плохо» - это строка в памяти, которая имеет свой новый адрес.И вы используете переменную указателя, чтобы указать на это новое место.
Чтобы фактически обновить адрес памяти, на который указывает переменная указателя, вы должны использовать его следующим образом
*str2 = "Bad"
Когда выиспользуйте str2, вы используете переменную.Но когда * str2 вы фактически используете базовый адрес, на который в данный момент указывает переменная str2.