Повторение того, что написали другие пользователи, но я хочу предоставить контекст.
Возьмите эти два определения:
void f1(char *ptr) {
/* f1 can change the contents of the array named ptr;
* and it can change what ptr points to */
}
void f2(char * const ptr) {
/* f2 can change the contents of the array named ptr;
* but it cannot change what ptr points to */
}
Создание самого указателя const
, как в примере с f2, абсолютно почти бессмысленно. Каждый параметр, переданный функции, передается по значению. Если функция изменяет это значение, она меняет только свою локальную копию и не влияет на вызывающий код.
/* ... calling code ... */
f1(buf);
f2(buf);
В любом случае buf
не изменяется после вызова функции.
Рассмотрим функцию strcpy ()
char *strcpy(char *dest, const char *src);
Одна из возможных реализаций -
char *strcpy(char *dest, const char *src) {
char *bk = dest;
while (*src != '\0') {
*dest++ = *src++;
}
*dest = *src;
return bk;
}
Эта реализация меняет dest
и src
только внутри функции. Создание одного из указателей (или обоих) const
ничего не даст для функции strcpy () или для вызывающего кода.