中級 › sizeofが配列の要素数ではなくポインタのサイズを返す › パターン1
sizeofが配列の要素数ではなくポインタのサイズを返す
配列に対するsizeofは配列全体のバイト数を返しますが、関数の引数として渡された配列はポインタに変わっているため、同じsizeofが8(ポインタのサイズ)を返してしまいます。
1 #include <stdio.h> 2 3 int main(void) { 4 int nums[5] = {1, 2, 3, 4, 5}; 5 int *p = nums; 6 int count = sizeof(_____) / sizeof(int); ^ 7 printf("%d\n", count); 8 return 0; 9 }
出力: 2期待: 5
空欄を埋めてコンパイル・実行を通す
pはnumsの先頭要素を指すポインタで、sizeof(p)はポインタ自体のサイズ(8バイト)を返します。配列全体のバイト数が欲しいときは、配列そのものにsizeofを使う必要があります。
次の問題