##沒有躲過的坑--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;
}
}
~~~
- 前言
- deprecated關鍵字
- 指針(內存泄露)
- 頭文件相互包含(Compiler error C2653: not a class or namespace name)
- 獲取一張圖片的width和height
- This function or variable may be unsafe.
- 智能指針陷阱
- wstring與string的轉換
- windows下chrome瀏覽器插件不能安裝
- 重定義關鍵字
- 正確釋放vector的內存
- 獲取設備環境HDC
- 抽象類不能實例化對象(但是你明明定義的不是抽象類)
- 重載賦值運算符的自我賦值
- 程序中的變量未初始化
- 成對使用new和delete時要采取相同的形式
- 意想不到的除數為零
- map的初始化(插入數據)
- 正則表達式截取字符串
- 捕獲窗口之外的鼠標消息(鉤子還是??)
- 類中的靜態成員變量(static or const static)
- 有if就要有else(一定成對)
- map查找結果處理
- 使用using namespace std的壞習慣
- new一個指針數組、以及創建動態二維數組
- 使用太多的全局變量
- 沒有及時break出for循環
- vector使用erase后迭代器變成野指針
- C++函數的默認參數(重新定義默認參數)
- 0xC0000005: 讀取位置 xxx時發生訪問沖突
- std::string初始化、最快速判斷字符串為空
- 你開發的軟件安裝在C盤Program Files (x86)下產生的異常