C++中的Char*数组内存分配

Char * Array Memory Allocation in C++

本文关键字:内存 分配 数组 中的 Char C++      更新时间:2023-10-16

下面是我的字符指针数组:

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字节。在64位系统上,指针的大小通常为8字节。但这并没有硬性规定,指针的大小可能因机器而异。由于数组的每个元素都是一个指针,所以结果就是这样。

内存分配,比如说intint*的不同之处在于,前者需要分配空间来容纳整数的所有值,而后者则需要同样多的空间来容纳指针的值。

字符串文字是只读char元素的数组,以特殊字符''结尾。当您使用字符串文字时,它会衰减为指向该数组中第一个元素的指针。因此,制作一个由四个指针组成的数组char,元素大小总是指针的大小,即使该指针指向字符串文字。

在64位系统上,指针的通常大小是64位,即8个字节。这就是为什么数组中的每个元素都是8个字节。在32位系统上,指针的大小当然是32位,4个字节。

字符串文字的长度无关紧要,例如

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

在上面的数组中,元素大小仍然是指针的大小,即64位系统上的8个字节。