让我们说下面是我的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
答案 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个字节。