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

Gre*_*een 5 c++ arrays int pointers multidimensional-array

我知道如何创建一个多元数组标准方式:

const int m = 12;
const int y = 3;
int sales[y][n];
Run Code Online (Sandbox Code Playgroud)

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

int * ms = new int[m];
Run Code Online (Sandbox Code Playgroud)

但是有可能创建一个指向多重阵列的指针吗?

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
Run Code Online (Sandbox Code Playgroud)

如何创建这样的指针?

Jam*_*nze 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];
Run Code Online (Sandbox Code Playgroud)

当然,你真的不应该使用array new.这里的_best_solution是写一个简单的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 );
Run Code Online (Sandbox Code Playgroud)

会做这项工作,但从长远来看,这个Matrix班级是值得的.


Joh*_*0te 5

当然,这是可能的.

你将创建一个指向int的指针,语法就像听起来一样:

int** ptr = sales;
Run Code Online (Sandbox Code Playgroud)

你可能已经看到了比你想象的更多的例子当人们传递字符串数组时(就像你在main()中的argv中那样),你总是传递一个字符数组的数组.

当然我们都喜欢在可能的情况下使用std :: string :)

  • 指针数组与多维数组不同. (4认同)