如何在C++中创建一个指向int类型的多维数组的指针?

5
我知道如何按照标准方式创建多维数组:
const int m = 12;
const int y = 3;
int sales[y][n];

我知道如何创建一个指向一维数组的指针:

int * ms = new int[m];

但是,是否可能创建一个指向多维数组的指针?

int * sales = new int[y][m];   // doesn't work
int * mSales = new int[m];    // ok
int * ySales = new int[y];    // ok
mSales * ySales = new mSales[y];    // doesn't work, mSales is not a type

如何创建这样的指针?

1
可能是如何在C++中使用数组?的重复问题。 - fredoverflow
3个回答

8
表达式new int[m][n]创建一个array[m] of array[n] of int。 由于它是一个新的数组,返回类型被转换为第一个元素的指针:pointer to array[n] of int。这就是你需要使用的类型:
int (*sales)[n] = new int[m][n];

当然,你真的不应该使用数组的 new。 在此最佳解决方案是编写一个简单的 Matrix 类,并使用 std::vector 存储内存。 根据你的感受,你可以重载 operator()(int i, int j) 并使用 (i, j) 进行索引,或者你可以重载 operator[](int i) 来返回一个辅助类,该类定义 operator[] 以进行第二个索引。 (提示:operator[] 是在 int* 上定义的;如果你不想麻烦地进行边界检查等,则 int* 可以作为代理工作。)
或者,类似于:
std::vector<std::vector<int> > sales( m, n );

使用 will do the job 可以完成工作,但从长远来看,Matrix 类将更值得投入。


回答问题并解释为什么那不是解决问题的正确方法,加1分。 - Mark B
1
请参考 http://stackoverflow.com/a/9760489/245265 中的示例 Matrix 类,该类包装了一个 std::vector - Emile Cormier

5
当然,这是可行的。
您将创建一个指向int的指针的指针,并且语法就像它听起来的那样:
int** ptr = sales;

你可能比你想象中看到更多的例子,当人们传递字符串数组(就像在main()函数的argv参数中一样),实际上是在传递一个字符数组的数组。

当然,如果可能的话,我们都更喜欢使用std::string :)


4
指针数组和多维数组不是相同的概念。 - Mike Seymour

3
我记得它大致是这样的:

int** array = new int*[m];
for(int i=0; i<m; i++) {
    array[i] = new int[n];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接