Không có sự khác biệt. Cả hai đều khai báo "a" là một số nguyên không thể thay đổi.
Nơi mà sự khác biệt bắt đầu xuất hiện là khi bạn sử dụng con trỏ.
Cả hai điều này:
const int *a
int const *a
khai báo "a" là một con trỏ đến một số nguyên không thay đổi. "a" có thể được gán cho, nhưng "* a" thì không.
int * const a
khai báo "a" là một con trỏ hằng đến một số nguyên. "* a" có thể được gán cho, nhưng "a" không thể.
const int * const a
khai báo "a" là một con trỏ hằng đến một số nguyên không đổi. Không thể gán "a" và "* a" cho.
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;
}