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

使用指针实现数组最大最小值打印无输出问题求助

解决你的C语言程序无输出问题

嘿,我帮你找出问题所在啦!你的程序之所以没有任何输出,是因为代码里存在两个关键错误:死循环和指针赋值颠倒。咱们逐个解决:

1. 致命的死循环问题

看你MaxandMin函数里的for循环:

for (int i = 0; i < len; len++)

这里的循环增量写错了!你应该让循环变量i递增(i++),结果写成了len++——这会让len的值越来越大,i永远满足i < len的条件,程序就一直卡在这个循环里,根本执行不到后面的printf语句,自然就没有输出。

把循环里的len++改成i++就能解决这个死循环。

2. 指针赋值颠倒导致结果错误

在MaxandMin函数的最后,你给传入的二级指针赋值时搞反了:

*p1 = max;
*p2 = min;

而主函数里你传入的dptr1是指向minPtr的指针(用来存储最小值的地址),dptr2是指向maxPtr的指针(用来存储最大值的地址)。这就导致最后minPtr存的是最大值的地址,maxPtr存的是最小值的地址,就算循环正常执行,输出结果也是颠倒的。

正确的赋值应该是:

*p1 = min;
*p2 = max;

修正后的完整代码

#include <stdio.h>

void MaxandMin(int * arr, int len,int **p1, int **p2);

int main(void) {
    int arr[5] = {1,3,5,2,4};
    int len = sizeof(arr) / sizeof(int);
    int * maxPtr;
    int * minPtr;
    int ** dptr1 = &minPtr;
    int ** dptr2 = &maxPtr;

    MaxandMin(arr, len, dptr1, dptr2);
    printf("max is %d, min is %d\n", *maxPtr, *minPtr);

    return 0;
}

void MaxandMin(int * arr, int len, int **p1, int **p2) {
    int * max;
    int * min;
    max = min = &arr[0];

    for (int i = 0; i < len; i++) {  // 修正循环增量为i++
        if (*max < *(arr + i))
            max = (arr + i);
        if (*min > *(arr + i))
            min = (arr + i);
    }

    *p1 = min;  // 修正指针赋值顺序
    *p2 = max;
}

现在运行这个修正后的程序,就能正常输出max is 5, min is 1啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:57:13