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

时间:2016-04-01 07:52:33

标签: c++ arrays memory

让我们说下面是我的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

2 个答案:

答案 0 :(得分:3)

  

我的问题是为什么它为每个元素分配8个字节   阵列

很可能是因为你机器上指针的大小是8个字节。通常指针的大小在64位系统上是8个字节。但同样没有硬性规则,每个机器的指针大小可能会有所不同。因为数组的每个元素都是一个指针,因此就是结果。

int的内存分配与int*的不同之处在于前者需要分配空间来保存所有整数值,而在后者中,需要尽可能多的空间来包含指针的值。

答案 1 :(得分:2)

字符串文字是一个只读char元素数组,以特殊字符'\0'结尾。当您使用字符串文字时,它会衰减到指针到该数组中的第一个元素。因此,将一个包含四个指针的数组赋予char将始终使元素大小为指针的大小,即使该指针指向字符串文字。

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

字符串文字的长度并不重要,例如

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

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