Namaran

Code daily. Without assist.

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)を正しく返します。これは参考実装であり、唯一の正解ではありません。