但求过程001 发表于 2026-2-3 21:38:49

求助~

#include <stdio.h>

int max,min;

void max_min_value(int array[],int n);

void main()
{
        int i,number;
        printf("enter 10 integer numbers:\n");
        for(i=0;i<10;i++)
        {
                scanf("%d",&number);
        }

        max_min_value(number,10);

        printf("\nmax=%d,min=%d\n",max,min);
}

void max_min_value(int array[],int n)
{
        int *p,*array_end;
        array_end=array+n;
        max=min=*array;
        for(p=array+1;p<array_end;p++)
        {
                if(*p>max)
                {
                        max=*p;       
                }
                else if(min>*p)
                {
                        min=*p;
                }
        }

}

如上程序为求最大值和最小值,想问一下如果这里把数组array[]这个形参换成用指针作为形参该如何写?

FishC 发表于 2026-2-3 21:39:41

你的程序有几个问题需要修正:首先,主函数中应该使用数组存储输入的10个整数;其次,函数形参应改为指针类型。下面是修改后的示例代码:

#include <stdio.h>

int max, min;// 全局变量,用于存储最大值和最小值

void max_min_value(int *array, int n);// 函数声明,使用指针作为形参

int main()
{
    int arr;// 定义数组存储10个整数
    printf("enter 10 integer numbers:\n");
    for(int i = 0; i < 10; i++)
    {
      scanf("%d", &arr);// 输入每个数组元素
    }

    max_min_value(arr, 10);// 调用函数,传递数组名(即指针)

    printf("\nmax=%d,min=%d\n", max, min);
    return 0;
}

void max_min_value(int *array, int n)// 函数定义,形参为指针
{
    int *p, *array_end;
    array_end = array + n;// 计算数组结束位置
    max = min = *array;   // 初始化最大最小值为第一个元素
    for(p = array + 1; p < array_end; p++)// 遍历数组
    {
      if(*p > max)
            max = *p;
      else if(*p < min)
            min = *p;
    }
}

主要修改点:
1. 将函数形参从 int array 改为 int *array,即指针类型。
2. 主函数中使用数组 arr 存储输入,并传递数组名 arr 给函数。
3. 函数内部通过指针运算遍历数组元素,找出最大值和最小值。

这样修改后,程序就能正确运行了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

但求过程001 发表于 2026-2-3 22:09:29

FishC 发表于 2026-2-3 21:39
你的程序有几个问题需要修正:首先,主函数中应该使用数组存储输入的10个整数;其次,函数形参应改为指针类 ...

我还以为形参应该为 *array[],就想不出来了,原来形参改为*array,那我可以理解了,谢谢~~

FishC 发表于 2026-2-3 22:09:48

但求过程001 发表于 2026-02-03 22:09
FishC 发表于 2026-2-3 21:39
你的程序有几个问题需 ...

不客气,很高兴能帮到你!你的理解是对的,核心就是把形参的类型从 int array 改为 int *array。

这里最关键的一点是:当数组名作为实参传递给函数时,它实际上传递的是数组首元素的地址,所以函数用指针变量来接收是再自然不过的事情了。

你原来的代码框架其实已经非常接近这个思想了(比如函数内部用了 *p 和 p < array_end 这样的指针操作),只是函数声明和主函数里的调用需要配合调整一下。

理解了这个,以后类似“用指针处理数组”的问题就都能举一反三了。如果还有其他疑问,随时可以再来问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

行客 发表于 2026-2-4 17:46:26

函数声明 / 定义的形参修改:
原代码:void max_min_value(int array[],int n)
修改后:void max_min_value(int *array, int n)
本质:这两种写法完全等价,编译器都会把 int array[] 解析为 int *array,因为数组作为函数参数时,只会传递数组首元素的地址,不会传递整个数组。
指针操作的核心逻辑:
*array:等价于 array,表示取指针 array 指向的第一个元素值。
array + n:指针算术运算,指向数组首元素往后偏移 n 个位置的地址(超出数组最后一个元素,作为遍历终止条件)。
*p:遍历过程中,取指针 p 当前指向的元素值,等价于 array(比如 p = array + 2 时,*p 就是 array)。
其他小优化:
main 函数返回值改为 int(符合 C 语言标准,原 void main 是非标准写法)。
把 min > *p 调整为 *p < min,逻辑等价,但更符合日常阅读习惯。

群梦 发表于 2026-2-6 08:37:53

#include <stdio.h>

int max,min;

void max_min_value(int *array,int n);

void main()
{
      int i,number;
      printf("enter 10 integer numbers:\n");
      for(i=0;i<10;i++)
      {
                scanf("%d",&number);
      }

      max_min_value(number,10);

      printf("\nmax=%d,min=%d\n",max,min);
}

void max_min_value(int *array,int n)
{
      int *p,*array_end;
      array_end=array+n;
      max=min=*array;
      for(p=array+1;p<array_end;p++)
      {
                if(*p>max)
                {
                        max=*p;      
                }
                else if(min>*p)
                {
                        min=*p;
                }
      }

}
代码就这样
页: [1]
查看完整版本: 求助~