C++ 在堆上開辟與釋放二維、三維指針詳細(xì)解析
學(xué)習(xí)C++新手通常會(huì)對(duì)指針的使用比較頭疼,其實(shí)指針的概念很簡(jiǎn)單,只要能悟清楚這樣一個(gè)簡(jiǎn)單的道理就能對(duì)指針有一定的認(rèn)識(shí)了: 例如 int *a = new int[10]; 一維指針其實(shí)就相當(dāng)于一維數(shù)組,不用去看書上所說(shuō)的數(shù)組在內(nèi)存中的首地址這些晦澀的話,以此類推 二維指針就相當(dāng)于二維數(shù)組,新手對(duì)一維數(shù)組的開辟與釋放比較容易熟悉,例如上面的a 釋放就是 delete []a; a = NULL; 注意a = NULL; 必須要加上,這樣是為了避免這個(gè)指針會(huì)變成“野指針”。寫程序時(shí)一定要注意規(guī)范性和嚴(yán)謹(jǐn)性,避免可能會(huì)出現(xiàn)的錯(cuò)誤。
//二維指針的開辟與釋放
int **b = NULL;
b = new int*[10];
for(int i = 0; i != 10; ++i)
{
b[i] = new int[50];
memset(b[i], 0, sizeof(int)*50);
}
//這樣就在堆上開辟了int類型的二維指針,大小為10*50,相當(dāng)于在堆上一個(gè)二棧數(shù)組int b[10][50];
for(int i = 0; i != 10; ++i)
{
delete []b[i];
b[i] = NULL;
}
delete []b;
b = NULL;
//三維指針的開辟與釋放
int ***a = NULL;
a = new int**[10];
for(int i = 0; i != 10; ++i)
{
a[i] = new int*[50];
for(int j = 0; j != 50; ++j)
{
a[i][j] = new int[30];
memset(a[i][j], 0, sizeof(int)*30);
}
}
//這樣就在堆上開辟了int類型的三維指針,大小為10*50*30,相當(dāng)于在棧上一個(gè)二維數(shù)組int a[10][50][30];
for(int i = 0; i != 10; ++i)
{
for(int j = 0; j != 50; ++j)
{
delete []a[i][j];
a[i][j] = NULL;
}
delete []a[i];
a[i] = NULL;
}
delete []a;
a = NULL;
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
C++動(dòng)態(tài)規(guī)劃算法實(shí)現(xiàn)矩陣鏈乘法
動(dòng)態(tài)規(guī)劃算法通常用于求解具有某種最優(yōu)性質(zhì)的問(wèn)題。在這類問(wèn)題中,可能會(huì)有許多可行解。每一個(gè)解都對(duì)應(yīng)于一個(gè)值,我們希望找到具有最優(yōu)值的解2022-06-06

