【问题标题】:Trying to make a Pointer to a dynamically allocated char array试图创建一个指向动态分配的 char 数组的指针
【发布时间】:2018-08-26 03:03:06
【问题描述】:

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

char * head;

char * coolArray = new char[5];

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

head = &coolArray;

由于&coolArraychar ** 而无法执行此操作 ^?

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

head = *&coolArray;

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

谁能解释这个指向堆上的东西的概念?

【问题讨论】:

  • 5 个字节,而不是位。执行head = &coolArray 得到coolArray 的地址,它是一个指向字符指针的指针,并试图将它分配给head,它只是一个字符指针。类型不匹配。 *&coolArray 引用然后尊重该值,最终将成为正确的分配类型 head = coolArray
  • 一元 *& 在指针上是相反的/相反的 - & 是“地址”运算符,而 * 是取消引用(又名“get a引用该地址的内容") 运算符。所以head = *&coolArray 完全等同于head = coolArray。这与指向的东西是否在“堆”上完全无关。

标签: c++ arrays pointers char


【解决方案1】:

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

除了学习目的,一般不要使用原始数组、指针和new表达式。


这应该分配 5 位

不,它分配了 5 个字节

字节是 C++ 中最小的可寻址内存单元。类型 charunsigned charsigned char,以及 C++17 和更高版本的 std::byte,都是保证字节大小。每个字节的位数通常为 8,至少为 8,但可以更大,由 <limits.h> 标头中的 CHAR_BIT 常量给出。


head = &coolArray;

随便写

head = coolArray;

这会将一个指针值(指针变量coolArray 中的那个)分配给一个指针变量。


head = *&coolArray;

通常,对于任何变量 v,表达式 &v 都会为您提供指向该变量的指针。

取消引用该指针*&v,表示相同的变量。所以你可以直接写v

【讨论】:

    【解决方案2】:

    “堆”和内存分配是红鲱鱼。

    &coolArray 是“coolArray 所在的位置”。
    *p 是“p 位置处的事物”。
    *&x 是“@987654326 所在位置的事物@是”,即coolArray

    这很像现实世界——“住在杰克住的房子里的人”就是杰克本人,对吧?

    顺便说一句,你也可以写head = coolArray;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-02
      • 2021-04-15
      • 2013-05-26
      • 2015-05-21
      • 1970-01-01
      • 2020-11-18
      • 2016-02-22
      • 2021-03-29
      相关资源
      最近更新 更多