在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。
答案 0 :(得分:45)
sizeof
为您提供以字节为单位的大小,而不是元素的数量。正如Alok所说,为了获得元素的数量,将数组的字节大小除以一个元素的字节大小。正确的C语言是:
sizeof a / sizeof a[0]
答案 1 :(得分:35)
sizeof a / sizeof a[0];
这是一个编译时常量,因此您可以使用它来创建另一个数组:
#define N sizeof a / sizeof a[0]
int n_a[N];
答案 2 :(得分:10)
sizeof
返回传递元素的内存大小。通过将数组的大小除以单个元素大小,可以获得元素计数。
请注意,元素大小也可能包含一些填充字节。因此,填充结构(例如,当一个char成员后跟一个指针时)的sizeof
值将大于其成员大小的总和。
另一方面,在计算数组中的元素时不要让它烦恼:sizeof(a) / sizeof(a[0])
仍然可以像预期的那样顺利运行。
答案 3 :(得分:-1)
ssize_t portfoySayisi = sizeof(*portfoyler);
这个作品