如何确定C语言中数组的大小?
也就是说,数组可以容纳多少元素?
如何确定C语言中数组的大小?
也就是说,数组可以容纳多少元素?
当前回答
对于多维数组,它稍微复杂一些。通常人们定义显式宏常量,即。
#define g_rgDialogRows 2
#define g_rgDialogCols 7
static char const* g_rgDialog[g_rgDialogRows][g_rgDialogCols] =
{
{ " ", " ", " ", " 494", " 210", " Generic Sample Dialog", " " },
{ " 1", " 330", " 174", " 88", " ", " OK", " " },
};
但是这些常量也可以在编译时用sizeof求值:
#define rows_of_array(name) \
(sizeof(name ) / sizeof(name[0][0]) / columns_of_array(name))
#define columns_of_array(name) \
(sizeof(name[0]) / sizeof(name[0][0]))
static char* g_rgDialog[][7] = { /* ... */ };
assert( rows_of_array(g_rgDialog) == 2);
assert(columns_of_array(g_rgDialog) == 7);
注意,这段代码可以在C和c++中运行。对于二维以上的数组,请使用
sizeof(name[0][0][0])
sizeof(name[0][0][0][0])
等等,无限。
其他回答
一个更优雅的解决方案是
size_t size = sizeof(a) / sizeof(*a);
sizeof(array) / sizeof(array[0])
int size = (&arr)[1] - arr;
点击这个链接了解解释
对于预定义数组:
int a[] = {1, 2, 3, 4, 5, 6};
计算数组中的元素数量:
element _count = sizeof(a) / sizeof(a[0]);
最好的方法是保存这些信息,例如,在一个结构中:
typedef struct {
int *array;
int elements;
} list_s;
实现所有必要的功能,如创建、销毁、检查是否相等以及其他所有需要的功能。它更容易作为参数传递。