Нет никакой разницы. Оба они объявляют "a" целым числом, которое нельзя изменить.
Различия начинают проявляться при использовании указателей.
Оба эти:
const int *a
int const *a
объявить "a" указателем на целое число, которое не изменяется. "a" можно присвоить, но нельзя "* a".
int * const 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;
}