我有一个函数:
void foo(double[][4]);
其采用第二维度等于4的2d阵列。如何分配一个2d数组,以便将其传递给函数?如果我这样做:
double * arr[4];
arr = new double[n][4];
其中n对于编译器来说是未知的。我无法编译它。如果我使用一个通用的2d动态数组,函数foo不会接受它。
根据要求,最好使用typedef
typedef double four[4];
four *arr; // equivalently double (*arr)[4];
arr = new four[n];
如果没有typedef
,你将成为更神秘的
double (*arr)[4];
arr = new double [n][4];
您确实应该考虑使用标准容器(std::vector
等(或容器的容器。
typedef double v4[4];
v4* arr = new v4[n];
不过,请考虑切换到数组和向量。
我知道这可能不是OP想要做的,但它可能会帮助其他需要类似答案的人。
您正在尝试创建一个静态成功数组的动态数组。STL得到了您的解决方案:std::vector
和std::array
有了这些容器,事情就更容易了:
std::vector<std::array<int, 4>> foo;
// Allocate memory
foo.reserve(8);
// Or instead of 8, you can use some runtime value
foo.reserve(someSize);
// Or did not allocated 8 + someSize, but ensured
// that vector has allocated at least someSize
// Add entries
foo.push_back({1, 2, 3, 4});
// Looping
for (auto&& arr : foo) {
arr[3] = 3;
}
// Access elements
foo[5][2] = 2;
除了创建一个新类型并占用一个符号之外,您还可以创建一个指向指针的指针,并这样做:
double **arr = new double*[j];
for (int i = 0; i < j; ++i)
{
arr[i] = new double[4];
}
而CCD_ 6是保持动态值的CCD_。我已经写了一个简单的代码来展示它的工作原理,请在这里查看。