c++ - 如果`new int`返回一个`int*`,那么为什么`new int[n]`不返回一个`int**`呢?
问题描述
我很困惑如何同时new int
返回new int[n]
一个int*
. 为什么后者不返回一个int**
?
以下是一些上下文:请参阅data
下面来自 Goodrich、Tamassia 和 Mount 的第二版的片段中的变量。C++教科书中的数据结构和算法:
class Vect {
public:
Vect(int n);
~Vect();
// ... other public members omitted
private:
int* data;
int size;
};
Vect::Vect(int n) {
size = n;
data = new int[n];
}
Vect::~Vect() {
delete [] data;
}
解决方案
(为了解释,答案包含简化)
int**
如果我没记错的话,在 C 中,指向 int 数组的指针将是 type 。
你误会了。在 C 中它也将是int*
.
当您声明:int foo[] = { 1, 2, 3 }
时,数组 ( foo
) 的名称可以被视为指向其第一个元素 ( 1
) 的指针。指向的指针int
是int*
。
此外,为什么我们调用
delete[]
而不是delete
, 来删除int*
(数据)?
delete
删除单个对象。delete []
删除动态数组。
推荐阅读
- angular - 使用子组件实例作为角度的道具
- python - 如何制作包含 QDockWidget 的 QScrollArea 并将其附加到 QHBoxLayout 的右侧?
- sql-server - Docker Compose 包含不受支持的选项:“环境”
- c - Emscripten:setjmp/longjmp 失败但在本机编译时运行
- javascript - 比较对象数组(图像)和跨度标签(图像)
- nginx - Spring Cloud 网关和 NGINX
- elasticsearch - ElasticSearch / Lucene:术语词典的自动机
- powerbi - 有条件地隐藏矩阵中的列 - Powerbi 桌面
- r - 使用 R 程序从 NASAPOWER 数据中得到错误
- javascript - 如何使用 jquery 将自定义选定的焦点类添加到列表中