You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言指针实现数组最值:指针传递问题求助

问题分析与修复方案

你的代码存在两个核心问题,同时还有可优化的空间:

1. 未初始化的野指针

在main函数中,你声明了int *min, *max;但没有给这两个指针分配有效的内存空间,它们属于野指针。直接传递给find函数并通过*min、*max赋值会触发未定义行为,比如程序崩溃、输出垃圾值。

正确写法是先定义普通整型变量存储结果,再传递它们的地址给函数:

int main(){
    int a[100];
    int n, min_val, max_val; // 定义普通变量存储最值
    printf("husnegtiinn elementiin toog oruul: ");
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    find(a, n, &min_val, &max_val); // 传递变量的地址
    printf("ih ni : %d \nbaga ni : %d", max_val, min_val); // 直接使用变量
}

2. 数组越界访问

在find函数中,你通过*(a + n)获取最小值,这会访问数组的越界位置——数组下标范围是0到n-1。因为你是降序排序,最小值应该是数组最后一个元素,要改成:

*min = *(a + n - 1);
// 或者更直观的写法:*min = a[n-1];

额外优化:无需排序也能找最值

其实找数组的最大和最小值不需要完全排序,遍历一次数组就能完成,时间复杂度从O(n²)降到O(n),效率更高:

void find(int a[], int n, int *min, int *max){
    *max = a[0];
    *min = a[0];
    for(int i = 1; i < n; i++){
        if(a[i] > *max){
            *max = a[i];
        }
        if(a[i] < *min){
            *min = a[i];
        }
    }
}

内容的提问来源于stack exchange,提问作者HowCanIBePro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:31:05