题目

指针求数组最大值

思路

本题用指针扫描数组,找出最大值(或其下标)。

best initially 指向首元素,指针 p 从前往后走,若 *p > *best 则更新 best;结束后输出 *best 或位置。

解题分析

用指针从 a 走到 a+n-1,维护当前最大值。与下标版第 31 题求 max 思路相同,只是访问写成 *p。

完整程序

#include <stdio.h>

int main(void)
{
    int n, a[200];
    if (scanf("%d", &n) != 1 || n < 1) {
        return 1;
    }
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    int maxv = *a;
    for (int *p = a + 1; p < a + n; p++) {
        if (*p > maxv) {
            maxv = *p;
        }
    }
    printf("%d\n", maxv);
    return 0;
}

运行示例

输入:

5
3 9 1 7 5

输出:

9