В чем разница между следующими объявлениями?
char * const a;
const char * a;
Чтобы понять разницу, я написал эту небольшую программу:
#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;
}
Я скомпилировал программу (с gcc 3.4) и запустил ее. Результат очень хорошо показывает разницу:
Before
pc1=ffbfd7e7
*pc1=x
pc2=ffbfd7e7
*pc2=x
After
pc1=ffbfd7e7
*pc1=y
pc2=ffbfd7e6
*pc2=x
Однако мне пришлось написать небольшую программу, чтобы получить ответ. Если я уйду от машины (например, в интервью), я не смогу ответить на вопрос.
Может кто-нибудь объяснить, комментируя приведенный выше пример, как работает ключевое слово const
?