将具有未知行和列大小的2d数组传递给函数(C ++)

时间:2015-09-05 10:38:40

标签: c++ function parameters

到目前为止我已经掌握了这个功能:

void sumcol(int a[r][c],int r,int c){
int i,j,sum=0;
//int sizec= sizeof(a)/sizeof(a[0][0]);
//int sizer= sizeof(a)/sizeof(a[0]);

for (i=0;i<r;i++){
    for (j=0;j<c;j++) sum=sum+a[j][i];
    cout<<"Suma pe coloana "<<i<<" este : "<<sum<<endl;
    sum=0;
}
}

我在第一行收到错误,即r和c未在此范围内声明。为什么?虽然我在那里读到:https://www.eskimo.com/~scs/cclass/int/sx9a.html 这是一种正确的宣告方式。

1 个答案:

答案 0 :(得分:2)

我认为你真正的问题是将2d数组传递给函数。如果你在编译时知道你的数组大小,我会建议像:

template <int r, int c>
void sumcol(int (&a)[r][c]){
    int i,j,sum=0;
    //int sizec= sizeof(a)/sizeof(a[0][0]);
    //int sizer= sizeof(a)/sizeof(a[0]);

    for (i=0;i<r;i++){
        for (j=0;j<c;j++) sum=sum+a[j][i];
        std::cout<<"Suma pe coloana "<<i<<" este : "<<sum<< std::endl;
        sum=0;
    }
}

并将其称为例如:

int main()
{

    int temp[3][5]; // You don't forget to initialize this in your real code
    sumcol(temp); 
}

或者如果您使用的是动态分配的矩阵数组(malloc)。比使用类似的东西:

void sumcol(int** a,int r,int c){
      do stuff

首先考虑阅读此帖子Passing a 2D array to a C++ function

我个人觉得使用酷C ++向量代替C数组更容易做到这一点。