char* pointer;
pointer = malloc (20000);
printf("%d", sizeof(pointer));
//output: 8
malloc で 20000 バイトを予約したので、出力には 20000 を期待していました。しかし、それは8を返しました。なぜこれが起こっているのですか?
64 ビット システム/OS を使用している必要があるため、printf("%d", sizeof(pointer)); に対して 8 が出力されました。
char *p; を宣言するとき。メモリ内に sizeof(char *) に等しいスペースを予約します。
システムが 64 ビットの場合は 8 バイト、32 ビットの場合は 4 バイトが予約されます。
今
char* pointer;
pointer = malloc (20000);
pointer = malloc(20000) を定義すると、ポインターがそのブロックの最初のバイトを指すメモリ内に 20000 バイトのブロックが予約され、20000 バイトがポインターに割り当てられません。
sizeof
渡した型のサイズを返します。
タイプはchar *
であり、 size のメモリ位置を指しているだけ20000
です。
sizeof
コンパイル時の演算子です。ポインターのサイズ (ここでは 8 バイト) のみを認識し、ポインターが指すサイズは認識しません。 sizeof
実行時には存在しません。
sizeof は、ポインター変数が指す領域ではなく、ポインター変数のサイズを示します。