利用指针求最大值,输入数值,得到最大值为随机量

不是很懂到底错在哪。

img

img


#include 
void findLargest(int a[],int n,int *pmax); 

int main()
{
  int a[100];
  int max,i,n;
  scanf("%d",&n);
  for(i=0;i"%d",&a[i]);
  findLargest(a,n,&max);
  printf("%d\n",max);
  return 0;

}

//@@1
void findLargest(int a[],int n,int *pmax)
{
    int i;
    pmax=&a[0];
    for(i=0;iif(a[i]>*pmax)
        {
            pmax=&a[i];
        }
    }
}
//@@1

改为 *pmax= a[0];

void findLargest(int a[],int n,int *pmax)
{
    int i;
    *pmax=a[0];
    for(i=0;i<n;i++)
    {
        if(a[i]>*pmax)
        {
            *pmax=a[i];
        }
    }
}

你这代码在函数里等于修改了pmax指针的地址。但指针类型参数是不能在函数内实现外部传递指针自身地址的改变的。

参考GPT和自己的思路:

问题在于在函数findLargest中,指针pmax被指向了数组a的第一个元素,而不是数组中最大的元素。因此,在最后输出时,max的值为初始化的随机值。

为了解决这个问题,可以在函数中先将pmax指向a数组中的第一个元素,然后遍历整个数组,对于每一个元素,如果它的值大于pmax所指向的元素的值,就将pmax指向该元素。这样在遍历完整个数组之后,pmax就会指向数组中的最大元素。

修改后的代码如下:

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

在调用findLargest函数时,应该将函数中要修改的变量max的地址传递给pmax,也就是调用findLargest(a, n, &max)。然后在输出时,直接输出max的值即可。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在findLargest函数中,将指针pmax指向了数组a的第一个元素,但是没有将该元素的值赋给max,所以在主函数中输出的结果是错误的。
·
修改方法:在findLargest函数中,找到最大值之后,将最大值赋给指针pmax所指向的地址,然后在主函数中将max的值赋为指针pmax所指向的值。
·
修改后的代码如下:

#include <stdio.h>
void findLargest(int a[], int n, int *pmax);

int main()
{
    int a[100];
    int max, i, n;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    findLargest(a, n, &max);
    printf("%d\n", max);
    return 0;
}

void findLargest(int a[], int n, int *pmax)
{
    int i;
    *pmax = a[0];
    for (i = 0; i < n; i++)
    {
        if (a[i] > *pmax)
        {
            *pmax = a[i];
        }
    }
}


养成好习惯吧,定义的变量的时候,每个变量都给初值。