Non c'è differenza. Entrambi dichiarano "un" un numero intero che non può essere modificato.
Il punto in cui le differenze iniziano ad apparire è quando si usano i puntatori.
Entrambi questi:
const int *a
int const *a
dichiarare "a" per essere un puntatore a un intero che non cambia. "a" può essere assegnato a, ma "* a" non può.
int * const a
dichiara "a" di essere un puntatore costante a un numero intero. "* a" può essere assegnato a, ma "a" non può.
const int * const a
dichiara "a" come puntatore costante a un numero intero costante. Né "a" né "* a" possono essere assegnati 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;
}
C'è una parola chiave const in C ora? Non c'era, ma non sono così familiare con lo standard C 99. –
Non è necessario esserlo. C90 è sufficiente. Sebbene non fosse nel K & R C originale. –
È una parola chiave in C89 e ANSI. Non so se fosse una parola chiave nei giorni di Kerningham e Richie. –