C++动态创建多维数组的指针问题

不太懂C++里的动态创建多维数组,碰到了一段代码

#include
using namespace std;
void main(){
float(*cp)[9][8];
int i,j,k;
cp=new float[8][9][8];
for(i=0;i<8;i++){
for(j=0;j<9;j++){
for(k=0;k<8;k++){
#赋值代码}}}}

不太了解前面的float(*cp)[9][8];不是二维的吗
为什么可以直接new float一个三维的数组

该回答内容部分引用GPT,GPT_Pro更好的解决问题
float(cp)[9][8] 是C++中动态创建多维数组的指针,其中cp是一个指向二维数组的指针,指向的二维数组大小为98,而这里也可以使用new float一个三维数组。

这是因为在C++中,我们可以通过指针来动态创建多维数组,其中每一层的大小可以是不同的,比如一个345的三维数组,可以使用如下的代码来动态创建:

int ***array = new int[3][4][5];

这里的array是一个三维数组的指针,其指向的三维数组大小为345,其实就是形成了一个三维的“盒子”,每一个盒子里都有一个int型的元素。

而在C++中也可以使用指针来动态创建多维数组,但是每一层的大小必须都是相同的,比如创建一个333的三维数组,可以使用如下代码来动态创建:

int ***array = new int[3][3][3];

这里的array也是一个三维数组的指针,其指向的三位数组大小也是333,同样也是形成了一个三维的“盒子”,每一个盒子里也都有一个int型的元素。

所以在C++中使用float(cp)[9][8]来动态创建多维数组,就是创建了一个298的三位数组,每一个“盒子”里都有一个float型的元素。而可以直接使用new float一个三位数组,就是因为这里所有三位里面每一层都有相同大小98。
如果回答有帮助,望采纳。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在C++中,可以通过指针和动态内存分配来实现多维数组的动态创建。在这个例子中,float(cp)[9][8]定义了一个指向三维数组的指针,其中第一维大小为8,第二维大小为9,第三维大小为8。这种方式可以看作是将二维数组指针的类型从float改为了float (*)[9],而在这个基础上再增加一个维度。

在使用new操作符时,可以根据这个指针的类型来分配内存。因此,cp=new float[8][9][8]可以分配一个大小为8x9x8的三维数组,并将指针cp指向这个数组的首地址。在赋值时,可以通过三重循环来访问数组中的元素,并对其进行赋值操作。

需要注意的是,在使用完这个三维数组后,需要使用delete[]操作符来释放分配的内存,以避免内存泄漏问题。具体方式为delete[] cp;,其中cp为之前动态分配的指针。