0

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

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

4

1 回答 1

3

使用分配数组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)很大程度上是无关紧要的,编译器将两者视为相同,并且发出的机器代码是相同的。[]符号只是一个语法元素,有助于使代码更易于理解。

于 2020-05-15T17:03:46.623 回答