Namaran

Code daily. Without assist.

2026-09-07

find_max.c

int *find_max(int *arr, size_t n) {
    /* write this: return a pointer to the largest element of arr
       (n is at least 1) */
}

find_maxを実装してください。配列arr(要素数nnは1以上)の中で最大の要素を指すポインタを返します。

Reference
int *find_max(int *arr, size_t n) {
    int *max = arr;
    for (size_t i = 1; i < n; i++) {
        if (arr[i] > *max) {
            max = &arr[i];
        }
    }
    return max;
}

maxには最大値そのものではなく、そこへのポインタを持たせておきます。より大きい要素が見つかるたびにmaxを更新するのは値ではなくアドレス(&arr[i])です。こうしておくと、呼び出し側は戻り値のポインタ経由で配列の中身を直接書き換えることもできます(値だけを返す関数ではできないことです)。これは参考実装であり、唯一の正解ではありません。