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)
如何创建这样的指针?
表达式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班级是值得的.
当然,这是可能的.
你将创建一个指向int的指针,语法就像听起来一样:
int** ptr = sales;
Run Code Online (Sandbox Code Playgroud)
你可能已经看到了比你想象的更多的例子当人们传递字符串数组时(就像你在main()中的argv中那样),你总是传递一个字符数组的数组.
当然我们都喜欢在可能的情况下使用std :: string :)
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |