如何获取C指针数组的长度?

时间:2010-09-03 15:11:20

标签: c arrays pointers programming-languages

  

可能重复:
  length of array in function argument

有没有像C can数组那样的Java can .length方法?谢谢。

3 个答案:

答案 0 :(得分:6)

不,给定一个C指针,你无法以平台无关的方式确定它的长度。

对于实际的C数组,虽然看到了dirkgently的answer

答案 1 :(得分:3)

您可以使用宏来获取它:

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

当且仅当数组是自动的并且您在其定义范围内访问它时:

#include <stdio.h>
int main() {
   int x[] = { 1, 2, 3 };
   printf("%zd\n", sizeofa( x ));
   return 0;
}

但是,如果你只有一个(衰变的)指针,你就无法获得数组长度而不诉诸某些非便携式实现特定的黑客攻击。

答案 2 :(得分:1)

如果你使用MSVC / MinGW,那么有一个真正的C指针的NONPORTABLE解决方案:

#include <malloc.h>
char *s=malloc(1234);
#ifdef __int64
printf( "%lu\n", _msize(s));
#else
#endif

对于像

这样的真实C-Array
AnyType myarray[] = {...};

AnyType myarray[constVal];

见另一个答案。