В чем разница между Const * char и Const Char *?

2 Ответы


  • Не существует "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 имя_переменной
    мы не можем объявить такой постоянный указатель.

Напишите свой ответ

Ваш ответ появится после модерации