簡體   English   中英

Char * C ++中的數組內存分配

[英]Char * Array Memory Allocation in C++

可以說下面是我的char指針數組:

char *names[4] = {"abc", "def", "ghi", "jkl"};
for(int i = 0; i < 4; i++){
   cout << &names[i] << endl;
}

這將打印4個內存分配:

0x7fff591c9b90
0x7fff591c9b98
0x7fff591c9ba0
0x7fff591c9ba8

我的問題是為什么要為數組中的每個元素分配8個字節? 您能幫助我了解如何在C ++中為每種數據類型分配內存嗎? 例如Char *,char,in,int *,string等,或引用任何引用。

TIA

我的問題是為什么要為數組中的每個元素分配8個字節?

可能是因為您計算機上的指針大小為8個字節。 在64位系統上,指針大小通常為8字節。 但是,這又沒有硬性規定,並且指針的大小可能會因計算機而異。 並且由於數組的每個元素都是一個指針,因此是結果。

int內存分配與int*不同之處在於,在前者中,您需要分配空間來容納整數的所有值,而在后者中,您需要足夠的空間來容納指針的值。

字符串文字是只讀char元素的數組,以特殊字符'\\0'終止。 當您使用字符串文字時,它會衰減為指向該數組中第一個元素的指針 因此,由四個指向 char 指針組成的數組將始終使元素大小為指針的大小,即使該指針指向的是字符串文字。

在64位系統上,指針的通常大小為64位,即8個字節。 這就是數組中每個元素為8個字節的原因。 在32位系統上,指針的大小當然是32位4字節。

字符串文字的長度無關緊要,例如

char const* string_array[] = { "a", "bc", "def", "ghij" };

在上面的數組中,元素大小仍然是指針的大小,即在64位系統上為8個字節。

暫無
暫無

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

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