中級 › 配列と、先頭要素へのポインタでsizeofの結果が変わってしまう理由 › パターン1
配列と、先頭要素へのポインタでsizeofの結果が変わってしまう理由
配列そのもの(nums)と、先頭要素のアドレス(&nums[0])を混同してsizeofに渡してしまうバグです。
1 #include <iostream> 2 int main() { 3 int nums[5] = {1,2,3,4,5}; 4 std::cout << sizeof(________) << std::endl; ^ 5 return 0; 6 }
出力: 8期待: 20(int5個分)
空欄を埋めてコンパイル・実行を通す
&nums[0]は「先頭要素へのポインタ」という別の型を作ってしまい、sizeofはポインタ自体のサイズ(8バイト)を返します。配列全体のサイズを知りたいときは配列名(nums)をそのまま渡します。
次の問題