我如何在C语言中确定我的数组的大小?

我如何在C语言中确定我的数组的大小?

也就是数组能容纳多少个元素?

解决办法

执行摘要:

int a[17];
size_t n = sizeof(a)/sizeof(a[0]);

完整答案:

要确定数组的字节大小,你可以使用sizeof操作符。 操作符。

int a[17];
size_t n = sizeof(a);

在我的电脑上,ints的长度是4字节,所以n是68。

为了确定数组中元素的数量,我们可以用数组的总大小除以 数组的总大小除以数组元素的大小。 你可以用类型来做这件事,像这样。

int a[17];
size_t n = sizeof(a) / sizeof(int);

并得到正确的答案(68/4=17),但是如果 a'的类型发生了变化,如果你忘记改变sizeof(int)',就会出现一个讨厌的错误。 `sizeof(int)',就会出现严重的错误。

所以首选除数是sizeof(a[0]),即数组中第0个元素的大小。 数组中第0个元素的大小。

int a[17];
size_t n = sizeof(a) / sizeof(a[0]);

另一个好处是,现在你可以很容易地在宏中对数组名称进行参数化 数组名称,并得到。

#define NELEMS(x)  (sizeof(x) / sizeof((x)[0]))

int a[17];
size_t n = NELEMS(a);
评论(20)

值得注意的是,sizeof在处理一个已经衰减为指针的数组值时没有帮助:即使它指向一个数组的开始,对编译器来说,它与指向该数组单个元素的指针是一样的。指针并不记得用于初始化它的数组的任何其他信息。

int a[10];
int* p = a;

assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));
评论(4)
sizeof(array) / sizeof(array[0])
评论(0)