Quelle est la différence entre les déclarations suivantes?
char * const a;
const char * a;
Afin de comprendre la différence que j'ai écrit ce petit programme:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
char a = 'x';
char b = 'y';
char * const pc1 = &a;
const char * pc2 = &a;
printf ("Before\n");
printf ("pc1=%p\n", pc1);
printf ("*pc1=%c\n", *pc1);
printf ("pc2=%p\n", pc2);
printf ("*pc2=%c\n", *pc1);
*pc1 = b;
/* pc1 = &b; */
/* *pc2 = b; */
pc2 = &b;
printf ("\n\n");
printf ("After\n");
printf ("pc1=%p\n", pc1);
printf ("*pc1=%c\n", *pc1);
printf ("pc2=%p\n", pc2);
printf ("*pc2=%c\n", *pc1);
return EXIT_SUCCESS;
}
J'ai compilé le programme (avec gcc 3.4) et il a couru. La sortie met en évidence la différence plutôt bien:
Before
pc1=ffbfd7e7
*pc1=x
pc2=ffbfd7e7
*pc2=x
After
pc1=ffbfd7e7
*pc1=y
pc2=ffbfd7e6
*pc2=y
Cependant, j'ai dû écrire le petit programme pour obtenir la réponse. Dans le cas où je suis loin de la machine (lors de l'entrevue, par exemple), je ne serais pas en mesure de répondre à la question.
Quelqu'un peut expliquer, en commentant l'exemple ci-dessus, comment l' const
mot clé fonctionne?