使用指针实现数组最大最小值打印无输出问题求助
解决你的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
相关产品推荐
相关产品推荐

