C中是否有数组大小/长度的快捷方式?

有没有办法加快在C中获取数组大小?

每次输入sizeof(array)/sizeof(int)都会变旧。 任何C库都有类似.length东西,还是有一些方法我可以将sizeof(array)/sizeof(int)为某种较短的常量(也可能使用点表示法)?

您可以使用sizeof(array)/sizeof(*array)并创建一个宏。

 #define length(array) (sizeof(array)/sizeof(*(array))) 

C中的所有解决方案归结为一个宏:

 #define ARRAY_LENGTH(array) (sizeof((array))/sizeof((array)[0])) 

你总是可以写一个宏来做它。 请注意,它不能用作函数,因为您必须将数组降级为指向其第一个元素的指针,因此它只返回sizeof(int *) / sizeof(int)

 #define INTSIZE(array) (sizeof(array) / (sizeof(int)) 

或者,更一般地……

 #define SIZE(array, type) (sizeof(array) / (sizeof(type)) 

哇,downvotes。 好的,这也有效:

 #define SIZE(array) (sizeof(array) / (sizeof((array)[0])) 

最简洁的答案是不”; 在C中,没有办法仅根据数组表达式获取数组中的元素数。 sizeof技巧和它一样好,并且它的使用仅限于数组类型的表达式。 所以以下方法不起作用:

 char *foo = malloc(1024); size_t count = sizeof foo; 

count接收指针类型的字节数(典型桌面架构上为4),而不是分配的块。

 char arr[100]; char *p = arr; size_t count = sizeof p; 

与上面相同。

 void foo(char *arr) { size_t count = sizeof arr; // same as above ... } void bar(void) { char array[100]; foo(array); ... } 

与上面相同。

如果您需要知道数组中有多少元素,则需要单独跟踪该信息。

C对arrays的治疗是很多胃灼热的根源。