有没有比这个 C 代码更短的方法来查找数组的长度?

发布于 2025-01-04 08:27:37 字数 142 浏览 1 评论 0原文

static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof(a)/sizeof(int);

ANSI 99 有捷径吗?

static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof(a)/sizeof(int);

Is there a shortcut, with ANSI 99?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

请帮我爱他 2025-01-11 08:27:37

我认为没有捷径,但你可以使用宏:

#define arrlen(arr) (sizeof(arr)/sizeof(arr[0]))

I think that there isn't a shortcut, but you cat use macro:

#define arrlen(arr) (sizeof(arr)/sizeof(arr[0]))
寂寞清仓 2025-01-11 08:27:37

是否有比此 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

:)

Is there a shorter way to find length of an array than this C code?

Yes, one character shorter:

static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof(int);

edit: There's an even shorter version suggested by @pmg:

static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof*a;

You could also use fewer characters for the identifier len.

:)

小霸王臭丫头 2025-01-11 08:27:37

如果您想要数组中的元素数量,

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 语言标准,§ 6.3.2.1 ¶ 3和§ 6.5.7.3 ¶ 7)。

If you want the number of elements in the array,

sizeof arr / sizeof *arr

or

sizeof arr / sizeof arr[0]

are about as short as it gets. Just remember that unless arr is a VLA, these will be computed at compile time.

Also remember that this only works if arr is an array expression, not a pointer. If you do something like

void foo(int arr[])
{
   size_t len = sizeof arr / sizeof *arr;
   ...
}

you won't get the answer you expect, because in this context arr is a pointer expression, not an array (refer to the online C language standard, § 6.3.2.1 ¶ 3 and § 6.5.7.3 ¶ 7).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文