将2D数组传递给函数时出错

时间:2017-01-08 04:32:37

标签: c++

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void faill (int arry[10][6], int f[], int a, int b)
{
    f={};
    for (int i=0;i<a;i++)
        for(int j=0;j<b;j++)
        if(arry[i][j]<60)
        f[i]++;
}
int main()
{
    srand(time(0));
    int student=10, test=6;
    int grade[student][test];
    int fail[10]={};

    for(int i=0;i<student;i++)
        for(int j=0;j<test;j++)
        grade[i][j]=rand()%101;
       faill(grade[10][6],fail,student,test);

        for (int x=0;x<student;x++)
        {
            cout<<"Student "<<x+1<<" : ";
            for (int y=0;y<test;y++)
                cout<<grade[x][y]<<" ";
            cout<<"(failed "<<fail[x]<<" subjects)"<<endl;
        }
    return 0;
}

此代码有以下错误:

| 24 | error:来自&#39; int&#39;的无效转换到&#39; int(*)[6]&#39; [-fpermissive] |

| 6 |注意:初始化&#39; void faill(int()[6],int ,int,int)&#39; |

的参数1

2 个答案:

答案 0 :(得分:0)

for(int i=0;i<student;i++)
        for(int j=0;j<test;j++)
        grade[i][j]=rand()%101;
       faill(grade,fail,student,test);

当你通过成绩[10] [6]时,你正在将一个int传递给你没有分配的记忆。这将是第11和第7个元素。

您需要将数组传递给该函数,如上所示。

答案 1 :(得分:0)

给出函数原型:

void faill (int arry[10][6], int f[], int a, int b);

然后至少你的调用代码不正确:

faill(grade[10][6],fail,student,test);  // grade[10][6] wrong

因为grade[10][6]int而不是数组 - 这是解析函数所需的内容faill

您需要将其更改为:

faill(grade,fail,student,test);