次の宣言の違いは何ですか?私は(GCC 3.4で)プログラムをコンパイルし、それを実行した定数ポインタと定数値のポインタ
#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;
}
:
char * const a;
const char * a;
は違いを理解するために、私は、この小さなプログラムを書きました。出力はかなり差があります:
Before
pc1=ffbfd7e7
*pc1=x
pc2=ffbfd7e7
*pc2=x
After
pc1=ffbfd7e7
*pc1=y
pc2=ffbfd7e6
*pc2=x
しかし、私は答えを得るために小さなプログラムを書く必要がありました。私がマシンから離れている場合(インタビューなど)、私はその質問に答えることができません。
上記の例で、const
キーワードの動作を説明してください。
より完全な答えは以下ですが、私は 'const'が次のトークンにバインドすると思っています。だから 'char * const a'では' a'という変数自体が変更可能ではありません。 'const char * a'では、それは変更可能ではない文字にポイントされます。 – davmac
私は、タイトルが "一定のポインタと定数値の間のポインタ"のように読むべきであると信じています。 – RBT