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