尝试将指针指向动态分配的char数组

时间:2018-08-26 03:03:06

标签: c++ arrays pointers char

我正在尝试在堆上分配一个char数组,然后为其创建一个指针:

char * head;

char * coolArray = new char[5];

这应该在堆上分配5位正确的字符吗?

head = &coolArray;

由于&coolArraychar **,因此无法执行^吗?

我可以通过以下方式修复它:

head = *&coolArray;

但是我不确定为什么这样。

任何人都可以解释指向堆上某些东西的概念吗?

2 个答案:

答案 0 :(得分:1)

首先,请先使用 std::string 处理字符串。

除了出于学习目的,通常不要使用原始数组,指针和new表达式。


  

这应该分配5位

否,它会分配5个字节

字节是C ++中最小的可寻址内存单元。类型charunsigned charsigned 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;