[英]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.