В чем разница const char* и char const*?

В языке программирования C++ разница между const char* и char const* касается правила определения константности. Оба типа указателей указывают на последовательность символов, но семантика их использования отличается.

const char* является указателем на постоянную (константную) последовательность символов. Это означает, что содержимое, на которое указывает указатель, не может быть изменено. Однако сам указатель может быть изменен и указывать на другой адрес.

const char* str = "Hello"; // указатель на постоянную строку     
str = "World"; // допустимо, меняем указатель на другую постоянную строку

char const* также является указателем на постоянную последовательность символов. Однако в данном случае модификатор const применяется к самим символам, на которые указывает указатель. Это означает, что содержимое, на которое указывает указатель, также не может быть изменено. Это может быть полезно, когда требуется гарантировать, что содержимое строки не будет изменено.

char const* str = "Hello"; // указатель на строку с константным содержимым    
// str[0] = 'W'; // ОШИБКА, попытка изменить символ в строке

Обратите внимание, что оба типа указателей const char* и char const* могут использоваться для обработки строк с постоянным содержимым или строк, которые не должны изменяться. Единственное отличие между ними заключается в порядке модификаторов const и char:

- В случае const char* const применяется к указателю, а char - к объектам, на которые он указывает.
- В случае char const* char применяется к указателю, а const - к объектам, на которые он указывает.

Однако, в обоих случаях можно использовать указатели для доступа только для чтения, чтобы обеспечить безопасность или гарантировать неизменность содержимого.