const char *
означает «указатель на неизменяемый символ». Обычно используется для строк символов, которые не должны быть изменены.
Скажем, вы пишете эту функцию:
int checkForMatch(const char * pstr)
Вы обещали (через сигнатуру функции), что не изменит вещь, на которую указывает pstr
. Теперь допустим, что часть проверки на совпадение будет включать игнорирование регистра букв, и вы попытались сделать это, преобразовав строку в верхний регистр, прежде чем выполнять другие проверки:
strupr(pstr);
Вы получите сообщение о том, что не можете этого сделать, потому что strupr
объявлено как:
char * strupr(char* str);
... и это означает, что он хочет иметь возможность записи в строку. Вы не можете писать символы в const char *
(для этого const
).
В общем, вы можете передать char *
во что-то, что ожидает const char *
без явного приведения, потому что это безопасно (дать что-то изменяемое для чего-то, что не намеревается его изменить), но не может передать const char *
во что-то, ожидающее char *
(без явного приведения), потому что это небезопасно (передача чего-то, что не предназначено для преобразования в нечто, что может изменить его).
Конечно, это C, и вы можете делать практически все в C, включая явное приведение const char *
к char *
& mdash; но это было бы действительно действительно плохой идеей , потому что есть (предположительно) какая-то причина, по которой указатель, на который указывает указатель, const
.