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的治疗是很多胃灼热的根源。