You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组最大值程序报错: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:22:39