ponteiro constante vs ponteiro em um valor constante [duplicado]
Esta questão já tem uma resposta aqui:
Qual é a diferença entre char * const e const char *? 18 respostasQual é a diferença entre as seguintes declarações?
<code>char * const a; const char * a; </code>
Para entender a diferença, escrevi este pequeno programa:
<code>#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", *pc2); *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", *pc2); return EXIT_SUCCESS; } </code>
Eu compilei o programa (com o gcc 3.4) e rodei-o. A saída destaca a diferença bastante bem:
<code>Before pc1=ffbfd7e7 *pc1=x pc2=ffbfd7e7 *pc2=x After pc1=ffbfd7e7 *pc1=y pc2=ffbfd7e6 *pc2=x </code>
No entanto, eu tive que escrever o pequeno programa para obter a resposta. Caso eu esteja longe da máquina (em uma entrevista, por exemplo), eu não seria capaz de responder à pergunta.
Alguém pode por favor explicar, comentando o exemplo acima, como oconst
palavra-chave opera?