【发布时间】:2010-09-03 15:11:19
【问题描述】:
【问题讨论】:
标签: c arrays pointers programming-languages
【问题讨论】:
标签: c arrays pointers programming-languages
不,给定一个 C 指针,您无法以与平台无关的方式确定它的长度。
对于实际的 C 数组,请参阅 dirkgently 的 answer
【讨论】:
您可以使用宏来获取它:
#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;
}
但是,如果您只有一个(衰减的)指针,则如果不求助于一些不可移植的实现特定的技巧,您将无法获得数组长度。
【讨论】:
size_t 或相应的有符号整数类型参数;或者后面的 n 转换说明符适用于指向对应于 size_t 参数的有符号整数类型的指针。
如果您使用 MSVC/MinGW,那么对于真正的 C 指针,有一个不可移植的解决方案:
#include <malloc.h>
char *s=malloc(1234);
#ifdef __int64
printf( "%lu\n", _msize(s));
#else
#endif
对于像一个真正的 C 数组
AnyType myarray[] = {...};
或
AnyType myarray[constVal];
查看其他答案。
【讨论】: