2010-05-27 120 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