在C中,我有一个结构数组定义如下:
struct D { char *a; char *b; char *c; }; static struct D a[] = { { "1a", "1b", "1c" }, { "2a", "2b", "2c" } };
我想确定数组中元素的数量,但sizeof(a)
返回不正确的结果:48,而不是2.我做错了什么,或者sizeof
这里根本不可靠?如果重要的话我正在使用GCC 4.4进行编译.
sizeof
为您提供以字节为单位的大小,而不是元素的数量.正如Alok所说,为了获得元素的数量,将数组的字节大小除以一个元素的字节大小.正确的C语言是:
sizeof a / sizeof a[0]
sizeof a / sizeof a[0];
这是一个编译时常量,因此您可以使用它来创建另一个数组:
#define N sizeof a / sizeof a[0] int n_a[N];
sizeof
返回传递元素的内存大小.通过将数组的大小除以单个元素大小,您可以获得元素计数.
注意,元素大小也可以包括一些填充字节.因此,填充结构(例如,当char成员后跟指针时)将具有sizeof
大于其成员大小和的值.
另一方面,在计算数组中的元素时不要让它困扰你:sizeof(a) / sizeof(a[0])
仍然会像预期的那样平滑.