2015-09-05 95 views
0

我走到這一步,這樣的功能:傳遞一個二維數組與未知的行和列大小的函數(C++)

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

聽說過指針? – itwasntme

+0

將數組的指針和長度傳遞給函數。指針將指向某個數組的開始,並且長度將告訴您它有多少個單元格(如果要迭代或其他)。 – rbaleksandar

回答

2

我認爲你真正的問題是將2d數組傳遞給函數。如果你正在使用dynamiccally分配矩陣陣列(malloc的)

int main() 
{ 

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

或者:如果你知道在編譯時的數組的大小,我會勸告是這樣的:

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; 
    } 
} 

,並要求它像forexample。比使用類似:

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

考慮閱讀此線程第一Passing a 2D array to a C++ function

我個人覺得更容易做到這一點的東西很酷的C++向量,而不是C數組。

+1

您不需要指定模板參數。你可以說'sumcol(temp);' – juanchopanza

+0

我不知道,非常感謝 –

相關問題