簡體   English   中英

C中結構數組的“sizeof”結果?

[英]Result of 'sizeof' on array of structs in C?

在 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])仍會按預期順利工作。

ssize_t portfoySayisi = sizeof(*portfoyler);

這一個作品

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM