有没有办法加速在C中获取数组大小?
每次变老都会输出sizeof(array)/sizeof(int)
。任何C库都有类似.length
的东西,或者我可以通过某种方式将sizeof(array)/sizeof(int)
定义为某种较短的常量(也可能使用点表示法)?
答案 0 :(得分:11)
您可以使用sizeof(array)/sizeof(*array)
制作宏。
#define length(array) (sizeof(array)/sizeof(*(array)))
答案 1 :(得分:11)
C中的所有解决方案归结为一个宏:
#define ARRAY_LENGTH(array) (sizeof((array))/sizeof((array)[0]))
答案 2 :(得分:3)
你总是可以写一个宏来做它。请注意,它不能用作函数,因为您必须将数组降级为指向其第一个元素的指针,因此它只返回sizeof(int *) / sizeof(int)
。
#define INTSIZE(array) (sizeof(array) / (sizeof(int))
或者,更一般地......
#define SIZE(array, type) (sizeof(array) / (sizeof(type))
哇,哇哇。好的,这也可行:
#define SIZE(array) (sizeof(array) / (sizeof((array)[0]))
答案 3 :(得分:2)
简短的回答是“不”;在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对阵列的处理是胃灼热批次的来源。