static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof(a)/sizeof(int);
是否有一个快捷方式,使用ANSI 99?
答案 0 :(得分:5)
我认为没有捷径,但你使用宏:
#define arrlen(arr) (sizeof(arr)/sizeof(arr[0]))
答案 1 :(得分:1)
是否有一种比这个C代码更短的方法来查找数组的长度?
是的,短一个字符:
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof(int);
编辑:@pmg建议使用更短的版本:
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof*a;
您还可以使用较少的字符作为标识符len
。
:)
答案 2 :(得分:1)
如果你想要数组中的元素的数量,
sizeof arr / sizeof *arr
或
sizeof arr / sizeof arr[0]
差不多。请记住,除非arr
是VLA,否则这些将在编译时计算。
还要记住,只有当arr
是数组表达式而不是指针时,这才有效。如果您执行类似
void foo(int arr[])
{
size_t len = sizeof arr / sizeof *arr;
...
}
你不会得到你期望的答案,因为在这种情况下arr
是一个指针表达式,而不是一个数组(参见在线C language standard,§6.3 .2.1¶3和§6.5.7.3¶7)。