2012-12-16 48 views
1

我可以使用sizeof運算符在c中進行一些計算得到 行數在僅作爲參數接收的函數內計數 沒有任何有關任何信息的二維數組行或列計數在這個傳遞的數組?不傳遞2d數組的行數到函數c

void main(void){ 
    int A[5][6]; 
    int columnsC = sizeof(A[0])/sizeof(int); 
    int rowsC = (sizeof(A)/sizeof(int))/columnsC; 
    printf("rows: %d\ncolumns: %d\n", rowsC, columnsC); 

    getch(); 
} 

前面的代碼爲我工作,但我不能找到一個有用的資源,以瞭解如何在下面的報頭的功能應用此:

void fun(int arr[][10]) 

我「M學習課程在編程語言原理,有的時候想的事情不同,尋找學習資源,和這個有很大幫助,但不是這一次顯然。

我欣賞任何幫助。

回答

6

沒有。傳遞給函數時無法找到數組的大小。傳遞給函數時,數組衰減爲指針。

此:

void fun(int arr[][10]) 

實際上是語法糖爲:

void fun(int (*arr)[10]) 

相反,可以通過大小爲THRID參數或大小與陣列本身的元件。

+0

謝謝Kingslandian –

1

我不相信這是可能的,除非你通過一個長度,或者你專門分配一個額外的行到陣列。該額外的行可以包含空字符。在fun函數中,你可以使用一個while循環遍歷數組,直到你點擊null值。

int i = 0; 
while (1) { 
    if(arr[i]==NULL){ 
     //exits when hits end  
     break; 
    } 
    //do stuff with arr[i] 
    i++; 
}