数组最大值程序报错:int*转int无效,换float正常求解答
解决"invalid conversion from 'int*' to 'int'"错误
咱们先拆解一下你遇到的问题,报错的核心原因是函数声明和调用时的参数类型不匹配,另外还有指针使用的小问题,我一步步给你讲清楚:
1. 函数声明与定义不匹配导致的类型错误
你写的函数声明是:
void find_biggest(int, int, int *);
但实际函数定义的第一个参数是int a[](等价于int*),而你调用的时候传的是数组名a(本质是指向数组首元素的指针,类型是int*),这就和声明里的第一个参数int类型完全不匹配,编译器自然会报invalid conversion from 'int*' to 'int'的错误。
换成float的时候能运行?应该是你当时连函数声明里的参数类型也一起改成float*了,只是没注意到这一点~
2. 指针变量biggest的使用错误
你在main里定义了int *biggest;,但这个指针没有初始化,直接传&biggest给函数的话,函数里的*biggest操作的是一个未初始化的指针的地址,这会导致未定义行为。其实你根本不需要用指针变量来存最大值,用普通int变量就足够了。
修正后的完整代码
#include<stdio.h> // 修正函数声明,第一个参数改成int[](或int*) void find_biggest(int[], int, int *); int main() { int a[100], n, biggest; // 改成普通int变量 int i; printf("Number of elements in array "); scanf("%d",&n); for(i=0;i<n;i++) { printf("\nEnter the values: "); scanf("%d",&a[i]); } // 第一个参数传数组a,第三个参数传biggest的地址 find_biggest(a, n, &biggest); printf("Biggest = %d",biggest); // 直接输出变量值 return 0; } void find_biggest(int a[], int n, int *biggest) { int i; *biggest=a[0]; for(i=1; i<n; i++) { if(a[i]>*biggest) { *biggest=a[i]; } } }
额外说明
- 数组名在函数参数传递时会退化为指针,所以
int a[]和int* a在函数参数里是等价的,函数声明时可以任选一种写法。 - 如果你非要用指针变量来存最大值,那需要给指针分配内存(比如用malloc),但完全没必要,普通变量更简单安全。
内容的提问来源于stack exchange,提问作者Jackos
相关产品推荐
相关产品推荐

