Модификатор const может использоваться для защиты объекта от возможного изменения со стороны функции. То есть, когда указатель передается в функцию, функция может модифицировать оригинал переменной, на которую указывает указатель. Если указатель определен как const, то функция не сможет модифицировать объект. Например, функция sp_to_dash() в следующей программе выводит дефис вместо каждого пробела в передаваемой строке. То есть строка «this is а test» будет напечатана как «this-is-a-test». Использование const при объявлении параметра гарантирует, что код функции не может модифицировать объект, на который указывает параметр.
#include <stdio.h>
void sp_to_dash(const char *str);
int main(void)
{
sp_to_dash ("this is a test");
return 0;
}
void sp_to_dash (const char *str)
{
while(*str) {
if(*str == ' ') printf ("%c", '-');
else printf("%c", *str);
str++;
}
}
Если написать sp_to_dash() таким образом, чтобы она модифицировала строку, то она не будет компилироваться. Например, если написать sp_to_dash()
/* Это неверно */
void sp_to_dash (const char *str)
{
while(*str) {
if(*str == ' ') *str = '-'; /* невозможно выполнить */
printf("%c", *str);
str++;
}
}
то возникнет ошибка времени компиляции.
Многие функции в стандартных библиотеках используют const при объявлении своих параметров. Это гарантирует сохранность объектов, на которые указывают параметры.