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