我正在尝试在堆上分配一个char
数组,然后为其创建一个指针:
char * head;
char * coolArray = new char[5];
这应该在堆上分配5位正确的字符吗?
head = &coolArray;
由于&coolArray
是char **
,因此无法执行^吗?
我可以通过以下方式修复它:
head = *&coolArray;
但是我不确定为什么这样。
任何人都可以解释指向堆上某些东西的概念吗?
答案 0 :(得分:1)
首先,请先使用 std::string
处理字符串。
除了出于学习目的,通常不要使用原始数组,指针和new
表达式。
” 这应该分配5位
否,它会分配5个字节。
字节是C ++中最小的可寻址内存单元。类型char
,unsigned char
和signed char
以及C ++ 17和更高版本的std::byte
都是保证的字节大小。每个字节的位数通常为8,至少为8,但可以更大,由CHAR_BIT
头中的<limits.h>
常量给出。
head = &coolArray;
只要写
head = coolArray;
这会将指针值(指针变量coolArray
中的一个)分配给指针变量。
head = *&coolArray;
通常,对于任何变量v
,表达式&v
都会为您提供指向该变量的指针。
取消引用指针*&v
表示相同的变量。因此,您可以只写v
。
答案 1 :(得分:0)
“堆”和内存分配是红色鲱鱼。
&coolArray
是“ coolArray
所在的位置”。
*p
是“位于p
位置的东西”。
*&x
是“ coolArray
所在的事物”,即coolArray
。
这很像现实世界-“住在杰克住的房子里的人”是杰克本人,对吗?
顺便说一句,您也可以写head = coolArray;
。