0
char* pointer;
pointer = malloc (20000);

printf("%d", sizeof(pointer));
//output: 8

malloc で 20000 バイトを予約したので、出力には 20000 を期待していました。しかし、それは8を返しました。なぜこれが起こっているのですか?

4

4 に答える 4

4

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 バイトがポインターに割り当てられません。

于 2013-03-11T06:10:19.483 に答える
2

sizeof渡したのサイズを返します。
タイプはchar *であり、 size のメモリ位置を指しているだけ20000です。

于 2013-03-11T06:04:11.823 に答える
0

sizeofコンパイル時の演算子です。ポインターのサイズ (ここでは 8 バイト) のみを認識し、ポインターが指すサイズは認識しません。 sizeof実行時には存在しません。

于 2013-03-11T06:05:35.090 に答える
0

sizeof は、ポインター変数が指す領域ではなく、ポインター変数のサイズを示します。

于 2013-03-11T06:06:17.820 に答える