礼炮..

我正在学习一本书中多维数组的动态分配,并且发现了一些方法,现在还没有问题。
但是这本书的作者向我们展示了一种方法,但是它不能正常工作。就是这个:

pbeans = new double [3][4];         // Allocate memory for a 3x4 array

这是错误:
error C2440: '=' : cannot convert from 'int (*)[4]' to 'int *'

我应该如何定义pbeans(如果这种类型的编码是合法的)?

到底是什么问题?

问候。

最佳答案

我的FAQ on arrays对此进行了介绍:

double (*pbeans)[4];
pbeans = new double[3][4];

// ...

delete[] pbeans;

对于“C声明符受损”,可以使用typedef使其更具可读性:
typedef double row[4];

row *pbeans;
pbeans = new row[3];

// ...

delete[] pbeans;

但是在C++中,我们更喜欢RAII容器而不是原始指针:
#include <vector>
#include <array>

std::vector<std::array<double, 4> > beans(3);

注意完全没有delete[],这使得此解决方案具有异常安全性。

09-07 07:08