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

时间:2010-11-29 20:45:58

标签: c arrays

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

每次变老都会输出sizeof(array)/sizeof(int)。任何C库都有类似.length的东西,或者我可以通过某种方式将sizeof(array)/sizeof(int)定义为某种较短的常量(也可能使用点表示法)?

4 个答案:

答案 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对阵列的处理是胃灼热批次的来源。