Нет никакой разницы. Оба объявляют «a» целым числом, которое невозможно изменить.
Место, где различия появляются, - это когда вы используете указатели.
Оба эти:
const int *a
int const *a
объявить «а» быть указателем на целое число, которое не меняется. «a» может быть назначено, но «* a» не может.
int * const a
объявляет «a» постоянным указателем на целое число. «* a» может быть назначено, но «a» не может.
const int * const a
объявляет «a» постоянным указателем на постоянное целое число. Ни «a», ни «* a» не может быть назначено.
static int one = 1;
int testfunc3 (const int *a)
{
*a = 1; /* Error */
a = &one;
return *a;
}
int testfunc4 (int * const a)
{
*a = 1;
a = &one; /* Error */
return *a;
}
int testfunc5 (const int * const a)
{
*a = 1; /* Error */
a = &one; /* Error */
return *a;
}
Есть ли ключевое слово const в C сейчас? Раньше не было, но я не очень хорошо знаком с стандартом C 99. –
Вам не обязательно быть. C90 достаточно. Однако это не было в оригинальном K & R C. –
Это ключевое слово в C89 и ANSI. Я не знаю, было ли это ключевое слово в днях Кринхинга и Ричи. –