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

问题描述 投票:0回答:1

代码:-p = new int *[5];其中p是指针并声明为int **P;。请向我解释一下为什么new和[5]之间存在*

c++ pointers nspointerarray
1个回答
2
投票

使用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)之间的区别是无关紧要的,编译器将两者视为相同,并且发出的机器代码相同。 []表示法只是一种语法元素,有助于使代码更易于遵循。

© www.soinside.com 2019 - 2024. All rights reserved.