Переменная char * - это указатель на один байт (char) в памяти.Наиболее распространенный способ обработки строк называется строкой в стиле c, где char * - это указатель на первый символ в строке, за которым следуют остальные символы в памяти.Строка c всегда будет заканчиваться символом «\ 0» или нулем, чтобы обозначить, что вы достигли конца строки («H», «e», «l», «l», «o», «\ 0 ').
"Hello" называется строковым литералом.То, что происходит в памяти, происходит в самом начале вашей программы, прежде чем что-либо еще выполняется, программа выделяет и устанавливает память для строки «Hello», в которой находятся другие статические константы.Когда вы пишете char * str = "Hello"; Компилятор знает, что вы используете строковый литерал, и устанавливает str в расположение первого символа этого строкового литерала.
Но будь осторожен.Все строковые литералы хранятся в той части памяти, в которую вы не можете писать.Если вы попытаетесь изменить эту строку, вы можете получить ошибки памяти.Чтобы этого не происходило, при работе с c-строками всегда следует писать const char * str = "Hello"; Таким образом, компилятор никогда не позволит вам изменить эту память.
Чтобы иметь изменяемую строку, вам нужно будет самостоятельно распределить и управлять памятью.Я бы предложил использовать std :: string или повеселиться и создать собственный класс string, который обрабатывает память.