急C++的指针问题

来源:百度知道 编辑:UC知道 时间:2024/05/11 15:17:06
已知变量z定义是double(*z)[10],要申请一块能容纳z中数据的动太空间,并使变量pz指向这个动态空间,则pz定义(double (**pz)[10])要申请动态空间的操作应表示()
答案是pz=new (double (*)[10]),请问这个答案是什么意思为什么要括号又要*,实在看不懂

double(*z)[10]这种形式的东东相当于一个二维数组指针。

#include <iostream>
using namespace std;

void main()
{
double a[2][3] = {{1., 2., 3.}, {4., 5., 6.}};
double (*z)[3] = a;
double (**pz)[3] = &z;

int i, j;

for (i = 0; i < 2; ++i)
{
for (j = 0; j < 3; ++j)
{
cout << z[i][j] << endl;
cout << (*pz)[i][j] << endl;
}
}

cout << endl;
pz = new (double (*)[3]);
// 路过的朋友解析一下这是怎么回事?
*pz = new double [2][3];

for (i = 0; i < 2; ++i)
{
for (j = 0; j < 3; ++j)
{
(*pz)[i][j] = j + 1.;
cout << (*pz)[i][j] << ' ';
}
cout << endl;
}

delete[] (*pz);
delete pz;
}

pz是个指针的指针,它指向一个double (*)[10]的指针,而这个被指向的指针又指向一个在一维拥有10个元素的2维数组,因此new (double (*)[10])实际上是动态分配一个指向这种2维数组的指针,然后返回这个指针的地址,因此需要pz这个指针的指针来接收~,这种