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

C语言报expected declaration specifiers before '*' token错误

C语言数组指针传参触发expected declaration specifiers or ‘...’ before ‘*’ token错误修复

错误根因

直接触发该编译错误的原因是指针声明语法书写错误:函数声明、定义的形参中写了*int grades[],C语言中指针修饰符*必须跟在类型关键字之后、形参名之前,不存在*int这种合法类型写法,编译器读到*时找不到前置的合法类型声明,就会抛出该错误。

除此之外代码中还有多处逻辑、语法问题,全部问题点如下:

  • 头文件引入顺序错误:#include <stdio.h>需要放在所有函数声明、代码逻辑之前,否则会触发printf隐式声明告警。
  • 形参类型和实参不匹配:传入的grades是一维int数组,形参不需要多级指针,正确的形参写法为int grades[](数组传参会自动退化为首元素指针,等价于int *grades)。
  • 整数除法精度丢失:sum和howmany都是int类型,直接运算会执行整数除法截断小数,即使返回double类型也拿不到正确的浮点结果,运算前需要先把其中一个值转为double类型。
  • 返回值接收、格式化输出类型不匹配:函数返回值是double类型,不能用int类型变量接收,也不能用%d占位符输出,需要用double类型存储、%f占位符输出。

修正后可运行代码

#include <stdio.h>

double findaverage(int howmany, int grades[]);

double findaverage(int howmany, int grades[]) {
    int i;
    int sum = 0;
    for (i = 0; i < howmany; i++) {
        sum = grades[i] + sum;
    }
    // 强转sum为double做浮点除法,避免整数截断
    return (double)sum / howmany;
}

int main()
{
    const int size = 5;
    int grades[5] = {30,56,23,44,45};
    // 用double类型接收平均值,用匹配的格式符输出
    double average = findaverage(size, grades);
    printf("%.2f", average);

    return 0;
}

运行后输出结果为39.60,和手动计算的平均值一致。

内容的提问来源于stack exchange,提问作者RhoAies

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:15:35