我想知道如何获得数组行和列大小。例如,它将是这样的:
int matrix[][] = { { 2, 3 , 4}, { 1, 5, 3 } }
这个的大小是2 x 3.如果不包括除stdio或stdlib之外的其他库,我如何计算?
答案 0 :(得分: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
变量只是指向矩阵所在的内存块。
答案 1 :(得分: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
答案 2 :(得分:0)
sizeof (matrix)
将为您提供数组的总大小(以字节为单位)。 sizeof (matrix[0]) / sizeof (matrix[0][0])
为您提供内部数组的维度,sizeof (matrix) / sizeof (matrix[0])
应该是外部维度。
答案 3 :(得分: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();
}