中級 › sizeofが配列の要素数ではなくポインタのサイズを返す › パターン3
sizeofが配列の要素数ではなくポインタのサイズを返す
配列に対するsizeofは配列全体のバイト数を返しますが、関数の引数として渡された配列はポインタに変わっているため、同じsizeofが8(ポインタのサイズ)を返してしまいます。
1 #include <stdio.h> 2 3 int main(void) { 4 char letters[6] = {'a', 'b', 'c', 'd', 'e', 'f'}; 5 char *p = letters; 6 int count = sizeof(________) / sizeof(char); ^ 7 printf("%d\n", count); 8 return 0; 9 }
出力: 8期待: 6
空欄を埋めてコンパイル・実行を通す
char型の配列でも同じ罠があります。ポインタpのsizeofは要素の型と無関係に8(ポインタのサイズ)を返すため、要素数の計算には使えません。
次の問題