我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?

I encountered some thing weird code in Dynamic memory allocation for 2D arrays in C++? please explain me what is this?

本文关键字:解释 C++ 是什么 一下 代码 内存 动态 数组 2D 分配 我在      更新时间:2023-10-16

code:-p = new int *[5];
其中 p 是一个指针并声明为int **P;

请解释为什么在new和[5]之间有一个*

使用new分配数组时,需要指定类型。一般模式是:

type* x = new type[n];

其中type是基类型,x是变量,n是条目数。您可以通过向两侧添加*来使其成为指针类型:

type** x = new type*[n];

您可以无限期地继续此操作:

type**** x = new type***[n];

尽管在实践中您很少看到这一点,因为像这样过深的结构只不过是麻烦。

在C++中,由于其 C 传统,指针和数组是可以互换的,因为在这两个定义中基本上是等价的:

void f(int* x)
void f(int x[])

在内部,您可以将x用作指针或数组,或两者兼而有之:

int y = x[0];
int z = *x;

同样,这些也是相同的:

int y = x[1];
int z = *(x + 1);

一般来说,x[n]*(x + n)之间的区别在很大程度上是无关紧要的,编译器将两者视为相同,并且发出的机器代码是相同的。[]表示法只是一个语法元素,有助于使代码更易于遵循。