Чадрик
Не существует "const * char". Он не компилируется. Я предполагаю, что вы имели в виду «char * const», а не «const char *».
Они совершенно разные.
char * const p1;
объявляет постоянный указатель, с помощью которого вы можете иметь доступ как для чтения, так и для записи к char. Но сам указатель является константой, и вы НЕ МОЖЕТЕ его изменить. Как и все другие постоянные переменные, вы должны инициализировать его постоянным значением одновременно с объявлением. Вы не можете установить его позже в коде.
const char * p2;
объявляет указатель, с помощью которого вы можете получить доступ к char, но не можете изменить его с помощью указанного указателя. Но сам указатель можно изменить.
Обратите внимание: существует миф о том, что многие люди, в том числе некоторые с опытом программирования в несколько десятилетий, думают, что «const char *» означает указатель на постоянный символ. Это совершенно неверно. «const char *» означает только то, что char нельзя изменить с помощью указателя. Это вполне может быть обычный изменяемый символ, изменяемый другими средствами или другими указателями. Просто компилятор НЕ позволит вам изменить направление символа с помощью указателя const char.
Настоящий const char вообще нельзя изменить, как бы вы ни пытались. Настоящий const char может быть помещен в постоянную память, поэтому физически невозможно изменить его во время выполнения. Или он может вообще не выделять места для хранения и использоваться непосредственно на месте, где когда-либо упоминается указанный const char. В этом более позднем случае, конечно, нет никакого способа получить указатель, указывающий на char, поскольку он не занимает места для хранения.
Так что имейте в виду, что «const char *» НЕ ЯВЛЯЕТСЯ «указателем на постоянный символ».
А как насчет "const char []". Это отличается от "const char *". В случае «const char []» он определяет массив константных символов, и одно и то же имя переменной относится как к массиву, так и к указателю на начало массива.
В этом случае он действительно постоянен.
Сандра
Const char * variable_name
объявляет указатель на постоянный символ. Мы не можем использовать этот указатель для изменения указываемого значения.
Const * char имя_переменной
мы не можем объявить такой постоянный указатель.