ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
##没有躲过的坑--new一个指针数组、以及创建动态二维数组 实际工作中,有一个类A,现在需要使用多个A对象的指针,这是时候,首先想到的就是指针数组。 ————————————————————————————————————————————  **指针数组与数组指针**  首先,指针数组和数组指针有何区别是老生常谈的东西:  看中文不方便,看看英文描述: 指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针  数组指针:a pointer to an array,即指向数组的指针 还要注意的是他们用法的区别,下面举例说明。 int* a[4] 指针数组  表示:数组a中的元素都为int型指针  元素表示:*a[i] *(a[i])是一样的,**因为[]优先级高于*** int (*a)[4] 数组指针  表示:指向数组a的指针  元素表示:(*a)[i]  ————————————————————————————————————————————  **new一个指针数组**  对于类A的指针,可以这样写,不仅仅new,还调用了A的构造函数。 ~~~ A *P = new A(); ~~~ 但是对于new 一个指针数组,我们可以这么写: ~~~ A **P = new A *[10]; ~~~ 但是我们还没有进行构造呢? ~~~ for(int i=0; i<10; i++) { p[i] = new A(); } ~~~ 还有一个问题就是释放: ~~~ for(int i=0; i<10; i++) { delete p[i];//为什么不是delete[]p[i] } delete [] p; ~~~ ————————————————————————————————————————————  **创建动态二维数组** **1 pointer to pointer(二维指针)** ~~~ int **dynamicArray = 0; dynamicArray = new int *[ROWS] ; for( int i = 0 ; i < ROWS ; i++ ) { dynamicArray[i] = new int[COLUMNS]; } for( int i = 0 ; i < ROWS ; i++ ) { delete [] dynamicArray[i] ; } delete [] dynamicArray ; ~~~ **2 vector of vector** ~~~ #include <vector> using namespace std; #define ROWS 4 #define COLUMNS 4 vector<vector<int> > dynamicArray(ROWS, vector<int>(COLUMNS)); for(int i = 0;i < dynamicArray.size();++i) { for(int j = 0;j < dynamicArray[i].size();++j) { dynamicArray[i][j] = i*j; } } for(int i = 0;i < dynamicArray.size();++i) { for(int j = 0;j < dynamicArray[i].size();++j) { cout << dynamicArray[i][j] << endl; } } ~~~