stały wskaźnik vs wskaźnik na stałej wartości [duplikat]

To pytanie ma już tutaj odpowiedź:

Jaka jest różnica między char * const i const char *? 18 odpowiedzi

Jaka jest różnica między następującymi deklaracjami?

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

Aby zrozumieć różnicę, napisałem ten mały program:

<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>

Skompilowałem program (za pomocą gcc 3.4) i uruchomiłem go. Wynik podkreśla różnicę raczej dobrze:

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


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

Musiałem jednak napisać mały program, aby uzyskać odpowiedź. W przypadku, gdy jestem z dala od komputera (na przykład w wywiadzie), nie byłbym w stanie odpowiedzieć na pytanie.

Czy ktoś może wyjaśnić, komentując powyższy przykład, jakconst działa słowo kluczowe?

questionAnswers(11)

yourAnswerToTheQuestion