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

C++课程项目报错:int*转int无效转换,求数组成绩计算代码修复

解决数组传递时的类型转换错误

嘿,咱们来搞定你遇到的这个报错:Error: invalid conversion from ‘int*’ to ‘int’。问题出在你定义的函数参数和实际传递的数组不匹配——你写的函数期望接收单个int值,但你传的是数组名,而在C++里数组名会自动转换成指向数组第一个元素的指针(也就是int*类型),类型对不上自然就报错啦。

下面一步步帮你修正代码:

1. 先改函数的参数定义

接收数组的函数,参数得改成数组类型或者指针类型,而且一定要加上数组长度参数(因为C++里数组传进函数后,没法直接知道它有多长)。比如:

  • 原来的double arrayAverage(int, int); 要改成 double arrayAverage(int grades[], int size);(或者double arrayAverage(int* grades, int size);,这两种写法在函数里效果是一样的)
  • 同理,void droppedQuizzes(int, int); 改成 void droppedQuizzes(int grades[], int size);

2. 调整函数调用的方式

在main里调用这些函数的时候,直接传数组名和数组的长度就行,比如:

// 计算测验成绩的平均值
double quizAvg = arrayAverage(quizGrades, 7);
// 处理低分测验
droppedQuizzes(quizGrades, 7);

3. 补全并修正后的完整代码示例

我把你的代码补全并修正了,还加了一些基础的函数实现,你可以参考:

#include <iostream>
#include <algorithm> // 用来排序数组,处理低分的时候能用得上
using namespace std;

// 计算四个成绩的平均值(比如项目成绩)
double gradeAverage(double g1, double g2, double g3, double g4) {
    return (g1 + g2 + g3 + g4) / 4.0;
}

// 根据分数返回对应的绩点(你也可以改成返回字母等级,比如'A'、'B'这类)
double letterGrade(double score) {
    if (score >= 90) return 4.0;
    else if (score >= 80) return 3.0;
    else if (score >= 70) return 2.0;
    else if (score >= 60) return 1.0;
    else return 0.0;
}

// 计算数组中成绩的平均值
double arrayAverage(int grades[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += grades[i];
    }
    // 转成double避免整数除法的坑
    return static_cast<double>(sum) / size;
}

// 处理掉分的测验示例:去掉最低的两个分数
void droppedQuizzes(int grades[], int size) {
    sort(grades, grades + size); // 先排序,方便取高分部分
    cout << "去掉最低分后的测验成绩:";
    for (int i = 2; i < size; i++) {
        cout << grades[i] << " ";
    }
    cout << endl;
}

int main(){
    int quizGrades[7] = {100, 0, 50, 30, 40, 100, 0};
    int testGrades[2] = {50, 54};
    int projectGrades[4] = {100, 0, 90, 95};
    int labGrades[6] = {100, 100, 0, 50, 60, 70}; // 补全了你没写完的lab数组

    // 调用各个函数
    double quizAvg = arrayAverage(quizGrades, 7);
    cout << "测验成绩平均值:" << quizAvg << endl;

    droppedQuizzes(quizGrades, 7);

    double projectAvg = gradeAverage(projectGrades[0], projectGrades[1], projectGrades[2], projectGrades[3]);
    cout << "项目成绩平均值:" << projectAvg << endl;

    double testAvg = arrayAverage(testGrades, 2);
    cout << "测试成绩平均值对应的绩点:" << letterGrade(testAvg) << endl;

    return 0;
}

几个关键知识点要记住

  • C++里传数组的时候,数组名会变成指向首元素的指针,所以函数参数不能写单个int,得用int[]或者int*。
  • 一定要手动传数组长度,函数自己没法获取数组的大小(除非用std::array这类容器,但课程项目里应该先掌握基础的数组传递)。
  • 计算平均值的时候,记得把整数转换成double,不然整数除法会把小数部分丢掉,结果就不对了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:51:06