🗃️ 配列
main では sizeof(a) が 40 なのに、同じ配列を渡した関数の中では 8(32bit環境なら4)になります。gcc: warning: 'sizeof' on array function parameter 'a' will return size of 'int *' [-Wsizeof-array-argument]。
関数の引数に書いた int a[] は、実際には int *a に読み替えられます(配列からポインタへの成り下がり)。渡っているのは先頭の番地だけで、要素数の情報は失われています。
要素数は別の引数で渡します: int sum(const int *a, size_t n)。sizeof a / sizeof a[0] が使えるのは、配列がまだ配列である場所(宣言したのと同じ関数の中)だけだと覚えておきます。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。