次の宣言の違いは何ですか?
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
上記の例にコメントして、キーワードがどのように機能するかを誰か説明してもらえますか?