我列印了這個全域變數的大小,輸出是 20。我試圖理解它為什么不只是 15,因為有 5 個元素,每個元素的大小都是 3(包括每個元素末尾的 \0)。
#include <stdio.h>
char* arrChar[5] = { "hh","jj","kk","zz","xx" };
int main()
{
printf("size = %d\n", sizeof(arrChar));
}
我不知道是否有聯系,但如果我們將這里的所有數字組合起來,它將是 20,但我仍然不明白添加到陣列 (15) 中元素大小的元素數量 (5) 是什么有任何意義。

uj5u.com熱心網友回復:
您是正確的,記憶體中某處占用了 15 個位元組。但這些資訊通常沒有用。
對于char str[] = "1";,sizeof(str)與 相同sizeof(char*),它始終是指標的大小(32 位設定中為 4 個位元組)
Forchar str[] = "1234567"; sizeof(str)仍然相同(strlen用于字串的長度)
如果你有 5str秒,那么它的大小是 4 x 5。
您可以使用sizeof(arrChar)/sizeof(*arrChar)來獲取陣列中元素的總數。
uj5u.com熱心網友回復:
在您的示例中,實際資料是存盤在某些只讀記憶體部分中的字串文字。資料不在內部分配arrChar,只是資料的地址。
無論您將每個指標設定為指向什么,sizeof(arrChar)都將始終 yield sizeof(char*) * 5。如果指標大小為 4 個位元組,則 4*5=20。
uj5u.com熱心網友回復:
*char 指標每個元素占用 4 位。由于您的串列中有 5 個元素,即使是普通的 char 也占用 3 位,但由于您的指標占用 4 位,因此它需要 20 位,而不是 15。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364806.html
