如何new與delete各種二維陣列
阿新 • • 發佈:2019-01-04
#include<iostream>
using namespace std;
const int M = 10; //行數
const int N = 20; //列數
int main()
{
//第一種,可以直接[][]訪問。但是記憶體不連續,不是很推薦使用,除非M\N都不確定
int** pNum;//以int為例
pNum = new int*[M];
for (int i = 0; i<M; i++)
{
pNum[i] = new int[N];
}
//刪除的時候是
for (int j = 0; j<M; j++)
{
delete []pNum[j];
}
delete[]pNum;
//第二種,記憶體連續,但是不能[][],最推薦的一種。不能[][]但是你可以通過[i*n+j]來計算 啊
//這種是1維陣列轉化為2維陣列
int* a = new int[M*N];
// a[i*n+j]是a[i][j]
delete[]a;
//第三種
//記憶體不連續,可以[][],是第一種情況的特例,侷限性比較大,比第一種好在能直接delete,方便
//如果你確實知道N是多少,那麼可以用這種,比如說二維陣列做形參的時候(此時記憶體連續),不是很推薦使用
int(*pNum)[N] = new int[M][N];
delete[] pNum;
return 0;
}