38

在 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 进行编译。

4

4 回答 4

50

sizeof给你以字节为单位的大小,而不是元素的数量。正如 Alok 所说,要获得元素的数量,请将数组的字节大小除以一个元素的字节大小。正确的 C 习语是:

sizeof a / sizeof a[0]
于 2009-12-14T02:34:06.847 回答
48
sizeof a / sizeof a[0];

这是一个编译时常量,因此您可以使用它来创建另一个数组:

#define N sizeof a / sizeof a[0]
int n_a[N];
于 2009-12-14T02:31:50.533 回答
11

sizeof返回所传递元素在内存中的大小。通过将数组的大小除以单个元素的大小,您可以获得元素数。

请注意,元素大小也可能包括一些填充字节。因此,填充结构(例如,当 char 成员后跟指针时)将具有sizeof大于其成员大小总和的值。

另一方面,在计算数组中的元素时不要让它打扰您:sizeof(a) / sizeof(a[0])仍然会像预期的那样顺利工作。

于 2009-12-14T06:12:44.973 回答
-3

ssize_t portfoySayisi = sizeof(*portfoyler);

这个工作

于 2021-05-11T20:36:33.393 回答