2010-05-27 71 views
5

我想知道如何獲得數組行的大小&列。例如,它會是這樣的:如何獲得數組大小

int matrix[][] = { { 2, 3 , 4}, { 1, 5, 3 } } 

這一塊的大小是2×3,我如何計算這個不包括其他圖書館,但標準輸入輸出或STDLIB?

回答

10

這有一些相當有限的用途,但可以用sizeof這樣做。

sizeof(matrix) = 24 // 2 * 3 ints (each int is sizeof 4) 
sizeof(matrix[0]) = 12 // 3 ints 
sizeof(matrix[0][0]) = 4 // 1 int 

所以,

int num_rows = sizeof(matrix)/sizeof(matrix[0]); 
int num_cols = sizeof(matrix[0])/sizeof(matrix[0][0]); 

或定義自己的宏:

#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0])) 

int num_rows = ARRAYSIZE(matrix); 
int num_cols = ARRAYSIZE(matrix[0]); 

甚至:

#define NUM_ROWS(a) ARRAYSIZE(a) 
int num_rows = NUM_ROWS(matrix); 
#define NUM_COLS(a) ARRAYSIZE(a[0]) 
int num_cols = NUM_COLS(matrix); 

但是,要知道,你不能繞過這個矩陣然後使用這個int[][]宏招。不幸的是,與高級語言(java,python)不同,這個額外的信息並沒有傳遞給數組(你需要一個結構體或者一個C++類)。 matrix變量只是指向矩陣所在的內存塊。

+0

即使在C++中,你可以't得到那個信息... – 2010-05-27 04:53:40

+0

@BlueRaja,真的。我正在考慮使用類或向量<> ...但我想你可能會在c中使用一個結構。編輯。 – Stephen 2010-05-27 05:13:28

0

sizeof (matrix)會給你數組的總大小,以字節爲單位。 sizeof (matrix[0])/sizeof (matrix[0][0])爲您提供了內部陣列的尺寸,並且sizeof (matrix)/sizeof (matrix[0])應該是外部尺寸。

的大小
0

例子:

#include <stdio.h> 
#include <conio.h> 
int array[6]= { 1, 2, 3, 4, 5, 6 }; 
void main() { 
    clrscr(); 
    int len=sizeof(array)/sizeof(int); 
    printf("Length Of Array=%d", len); 
    getch(); 
} 
5

它不能 「這樣的事情」。涉及兩個(或更多)連續空方括號[][]的語法在C語言中永遠無效。

當您使用初始值設定項聲明數組時,只能刪除第一個大小。所有剩餘尺寸必須明確存在。因此,在你的情況下,第二大小可以是3

int matrix[][3] = { { 2, 3, 4 }, { 1, 5, 3 } }; 

,如果你想要它是3或者也可以是5,如果你願意的話

int matrix[][5] = { { 2, 3, 4 }, { 1, 5, 3 } }; 

換句話說,你會總是已經「知道」除第一個以外的所有尺寸。沒有辦法繞過它。然而,如果你想「召回」是某處的代碼,你可以得到它作爲

sizeof *matrix/sizeof **matrix 

至於第一大小,你可以把它作爲

sizeof matrix/sizeof *matrix