puntero constante vs puntero en un valor constante [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cuál es la diferencia entre char * const y const char *? 18 respuestas

¿Cuál es la diferencia entre las siguientes declaraciones?

<code>char * const a;
const char * a;
</code>

Para entender la diferencia escribí este pequeño 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>

Compilé el programa (con gcc 3.4) y lo ejecuté. La salida destaca la diferencia bastante bien:

<code>Before
pc1=ffbfd7e7
*pc1=x
pc2=ffbfd7e7
*pc2=x


After
pc1=ffbfd7e7
*pc1=y
pc2=ffbfd7e6
*pc2=x
</code>

Sin embargo, tuve que escribir el pequeño programa para obtener la respuesta. En caso de que esté lejos de la máquina (en una entrevista, por ejemplo), no podría responder la pregunta.

¿Puede alguien explicar, comentando el ejemplo anterior, cómo elconst palabra clave opera?

Respuestas a la pregunta(11)

Su respuesta a la pregunta