我想知道如何獲得數組行的大小&列。例如,它會是這樣的:如何獲得數組大小
int matrix[][] = { { 2, 3 , 4}, { 1, 5, 3 } }
這一塊的大小是2×3,我如何計算這個不包括其他圖書館,但標準輸入輸出或STDLIB?
我想知道如何獲得數組行的大小&列。例如,它會是這樣的:如何獲得數組大小
int matrix[][] = { { 2, 3 , 4}, { 1, 5, 3 } }
這一塊的大小是2×3,我如何計算這個不包括其他圖書館,但標準輸入輸出或STDLIB?
這有一些相當有限的用途,但可以用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
變量只是指向矩陣所在的內存塊。
sizeof (matrix)
會給你數組的總大小,以字節爲單位。 sizeof (matrix[0])/sizeof (matrix[0][0])
爲您提供了內部陣列的尺寸,並且sizeof (matrix)/sizeof (matrix[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();
}
它不能 「這樣的事情」。涉及兩個(或更多)連續空方括號[][]
的語法在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
即使在C++中,你可以't得到那個信息... – 2010-05-27 04:53:40
@BlueRaja,真的。我正在考慮使用類或向量<> ...但我想你可能會在c中使用一個結構。編輯。 – Stephen 2010-05-27 05:13:28