Указатель не сохраняется в памяти кода, это зависит от того, какой
type_qualifiers, которые вы используете для объявления указателя.
1 . char *ptr = "Stack overflow" ;
Теперь ptr сохраняется в памяти стека и указывает на
память кодов, указывая на то, что она хранит адрес памяти кодов.
2 . char *ptr = malloc(15);
strcpy(ptr,"stack overflow");
Теперь также ваш указатель хранится в памяти стека и указывает на
раздел кучи (который представляет собой не что иное, как расширенную память данных).
3 . char arr[15] , *ptr;
strcpy(arr,"Stack overflow");
ptr = arr ;
Теперь ваш указатель хранится в стеке и также указывает на
массив, который также хранится в секции стека.
в случае 1, пользователю не разрешено изменять строку, потому что указатель указывает на память кода, но тогда как в случае 2 и случае 3,
указатель может изменить строку.