私は私のコードにこれを持っています:
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なので)
array
コード内のポインタです。sizeof(array)
したがって、そのポインタのサイズをCバイトで返します(注意:Cのバイトには8ビット以上を含めることができます)。
したがって、8がポインタサイズです。
size_t
また、 printf()のフォーマット文字列の正しい型指定子はです%zu
。
array
はポインタであるため、ポインタのサイズ(sizeof(void *)
またはsizeof(char *)
)になり、予想どおりではありませsizeof(char)
ん。64ビットコンピュータを使用しているようです。
sizeof
関数ではなく、C言語の構造であるため、戻り値はありませんsizeof array
。括弧なしで記述できるという事実を考慮してください。C言語構造として、その値は完全にコンパイル時の情報に基づいています。array
配列の大きさはわかりませんが、ポインタ変数の大きさだけがわかります。主題の完全な報道についてはhttp://en.wikipedia.org/wiki/Sizeofを参照してください。
sizeof(array)
ポインタのサイズを返します。
配列全体のサイズを計算しています(4 * sizeof(char))しかし、配列上のアイテムの数(4)を知っている必要があります。
できるよ
size_t arraysize = sizeof(array)/ sizeof(char);
8/2=4を返します