可能性の重複:
How to find the sizeof(a pointer pointing to an array)Cである場合、malloc()と配列の長さ
私はCで動的配列を作成する方法を学んでいるが、私はできる問題に遭遇してきました把握できない。
私はコードを使用する場合:
int num[10];
for (int i = 0; i < 10; i++) {
num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));
を私は出力を得る:
sizeof num = 40
sizeof num[0] = 4
これは私が起こることを期待するものです。私は次のように配列のサイズををmalloc場合は:
int *num;
num = malloc(10 * sizeof(int));
for (int i = 0; i < 10; i++) {
num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));
それから私は、出力を得る:
sizeof num = 8
sizeof num[0] = 4
私は固定を使用する場合、配列のサイズが40である理由を知りたいですよ私がmalloc()
を使用しているときではありません。
'num'は2番目のケースではintへのポインタであり、そのサイズはマシンによって異なります。すなわち、32ビットの場合は4バイト、64ビットの場合は8バイトです.1番目の場合numはポインタではありません。base array 'の 'address'を使用します。したがって、sizeof()は配列の合計サイズを返します。 。 – krpra