如何获得数组大小

时间:2010-05-27 04:27:08

标签: c arrays

我想知道如何获得数组行和列大小。例如,它将是这样的:

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

这个的大小是2 x 3.如果不包括除stdio或stdlib之外的其他库,我如何计算?

4 个答案:

答案 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();
}