C++ 将行和列大小未知的二维数组传递给函数(C+;+;)

C++ 将行和列大小未知的二维数组传递给函数(C+;+;),c++,function,parameters,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 "<&

到目前为止,我得到了这个函数:

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;
}
}
void sumcol(int a[r][c],int r,int c){
int i,j,和=0;
//int sizec=sizeof(a)/sizeof(a[0][0]);
//int sizer=sizeof(a)/sizeof(a[0]);

对于(i=0;i我认为您真正的问题是将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;
    }
}
void sumcol(int** a,int r,int c){
      do stuff
或者,如果您使用的是动态分配矩阵数组(malloc),则可以使用以下内容:

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;
    }
}
void sumcol(int** a,int r,int c){
      do stuff
首先考虑阅读这篇文章


我个人觉得用C+ C++向量来代替C数组更容易。

在声明中不能使用变量值。听到指针。将指针和数组的长度传递给函数。指针将指向某个数组的开头,长度将告诉你它有多少个单元格。(如果您想要迭代或其他什么的话)。您不需要指定模板参数。您可以说
sumcol(temp);