2026-09-16
sum_of.c
int sum_of(int (*arr)[5]) {
// write this: sum all elements of *arr, computing the element
// count from sizeof(*arr) / sizeof((*arr)[0]) rather than the
// literal 5
}
sum_ofを実装してください。要素数はどこにもリテラルの5と書かず、sizeofから求めること。
Reference
int sum_of(int (*arr)[5]) {
size_t n = sizeof(*arr) / sizeof((*arr)[0]);
int total = 0;
for (size_t i = 0; i < n; i++)
total += (*arr)[i];
return total;
}
普通にint arr[5]を仮引数にすると、その時点で配列はポインタへ decay し、sizeof(arr)はポインタ自身のバイト数になってしまいます。ここでは「5要素の配列」そのものへのポインタint (*arr)[5]を受け取っているので、*arrで配列型を取り戻せ、sizeof(*arr)は配列全体のバイト数(20)を正しく返します。これは参考実装であり、唯一の正解ではありません。