3

私は私のコードにこれを持っています:

int x = 4;
char* array = malloc(x*sizeof(char));
size_t arraysize = sizeof (array);
printf("arraysize: %zu\n", arraysize);

このコードは印刷されます、

アレイサイズ:8

なぜ4ではなく8なのですか?(4 * sizeof(char)= 4 * 1なので)

4

5 に答える 5

7

arrayコード内のポインタです。sizeof(array)したがって、そのポインタのサイズをCバイトで返します(注意:Cのバイトには8ビット以上を含めることができます)。

したがって、8がポインタサイズです。

size_tまた、 printf()のフォーマット文字列の正しい型指定子はです%zu

于 2013-03-26T02:32:56.457 に答える
3

arrayはポインタであるため、ポインタのサイズ(sizeof(void *)またはsizeof(char *))になり、予想どおりではありませsizeof(char)ん。64ビットコンピュータを使用しているようです。

于 2013-03-26T02:15:40.717 に答える
3

sizeof関数ではなく、C言語の構造であるため、戻り値はありませんsizeof array。括弧なしで記述できるという事実を考慮してください。C言語構造として、その値は完全にコンパイル時の情報に基づいています。array配列の大きさはわかりませんが、ポインタ変数の大きさだけがわかります。主題の完全な報道についてはhttp://en.wikipedia.org/wiki/Sizeofを参照してください。

于 2013-03-26T04:41:03.473 に答える
2

sizeof(array)ポインタのサイズを返します。

于 2013-03-26T02:15:50.350 に答える
-2

配列全体のサイズを計算しています(4 * sizeof(char))しかし、配列上のアイテムの数(4)を知っている必要があります。

できるよ

size_t arraysize = sizeof(array)/ sizeof(char);

8/2=4を返します

于 2013-03-26T02:35:28.913 に答える