不是很懂到底错在哪。
#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];
}
}
}
养成好习惯吧,定义的变量的时候,每个变量都给初值。