我想知道如何获得数组行的大小&列。例如,它会是这样的:如何获得数组大小
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