我學(xué)C++數(shù)組的起初,想到能不能在“編譯時(shí)數(shù)組元素是可以變化,運(yùn)行時(shí)才確定元素個(gè)數(shù)”的這一問(wèn)題。于是我開(kāi)始看書,上別人的博客學(xué)習(xí),找到了動(dòng)態(tài)分配內(nèi)存的方法,憑著自己的理解,我嘗試寫下自己的想法。本人初學(xué),希望能多多體諒。
1、“?!焙汀岸选?/p>
當(dāng)時(shí)看到棧和堆時(shí)是一臉懵逼,上網(wǎng)查了查才大致了解這兩個(gè)是什么意思。
棧(stack):是由計(jì)算機(jī)自動(dòng)給你分配釋放內(nèi)存空間,就像是一個(gè)保姆所有的活都是他給來(lái)完成。在棧里存放著函數(shù)的參數(shù)值,局部變量的值等。棧是一級(jí)緩存(一級(jí)緩存:
一級(jí)緩存
都內(nèi)置在CPU內(nèi)部并與CPU同速運(yùn)行,可以有效的提高CPU的運(yùn)行效率。一級(jí)緩存越大,CPU的運(yùn)行效率越高,但受到CPU內(nèi)部結(jié)構(gòu)的限制,一級(jí)緩存的容量都很?。诒徽{(diào)用時(shí)在儲(chǔ)存空間,用完后就立即釋放。
堆(heap):是由程序員進(jìn)行手動(dòng)分配釋放空間,什么活都得自己干。堆是二級(jí)緩存生命周期由虛擬機(jī)的垃圾回收
算法來(lái)決定。程序員必須手動(dòng)分配內(nèi)存,手動(dòng)釋放內(nèi)存。
棧的存儲(chǔ)容量小,堆是可以隨意操作。
2、運(yùn)算符new和delete
(1)new
*類型標(biāo)識(shí)符 * 智指針名 = new 類型標(biāo)識(shí)符(初始值);
**
數(shù)組申請(qǐng)內(nèi)存空間語(yǔ)句如:int a=new int[6];
這里是向系統(tǒng)申請(qǐng)6個(gè)整形int元素空間,并把空間開(kāi)始的地址賦給a,這樣a就指向一塊具有6個(gè)儲(chǔ)存整型元素的內(nèi)存空間了。
動(dòng)態(tài)內(nèi)存分配空間是在運(yùn)行時(shí)確定,所以用new在堆上定義時(shí),它的長(zhǎng)度是一個(gè)變量。
new數(shù)組也是有缺點(diǎn)的的:不能提供顯示初始化值。
(2)delete
delete 指針名;
對(duì)于數(shù)組:delete []指針名;
示例:
int* arr1=new int;
delete arr1;
int* arr2 =new int[11];
delete []arr2;
注:在為一個(gè)數(shù)組釋放空間時(shí),是不需要寫數(shù)組長(zhǎng)度。
示例代碼:
include "iostream"
using namespace std;
int main()
{
int * pcount = new int;//動(dòng)態(tài)創(chuàng)建一個(gè)變量
cout << "請(qǐng)輸入數(shù)組長(zhǎng)度:" << endl;
cin >> pcount;
cout << "請(qǐng)輸入數(shù)組元素:" << endl;
int pArray = new int[*pcount];//動(dòng)態(tài)創(chuàng)建一個(gè)數(shù)組
for (int i{ 0 }; i < *pcount; i += 1)
{
cin >> pArray[i];
}
cout << "數(shù)組元素為:" << endl;
for (int i{ 0 }; i < *pcount; i += 1)
{
cout << pArray[i] << endl;
}
delete pcount;
delete []pArray;
return 0;
}
運(yùn)行結(jié)果:

注意:對(duì)于不是用new分配內(nèi)存的,使用delete是不合法的。并且只能對(duì)new分配的空間只能使用一次delete
如:
int i;
int*pi=&i;
string str ="bcdrf";
delete str; //錯(cuò),str不是一個(gè)動(dòng)態(tài)創(chuàng)建對(duì)象
delete pi; //錯(cuò),pi指向一個(gè)實(shí)例變量
首先編譯器是能先看出str不是指針類型,這個(gè)編譯器是能檢查出來(lái)的。其次,第二個(gè)錯(cuò)誤編譯器是不能檢查出來(lái)的,他不能確定一個(gè)指針能指向一個(gè)什么樣的對(duì)象。
因此,我們總結(jié)出,new和delete必須同時(shí)出現(xiàn),并且出現(xiàn)的次數(shù)必須一樣。
這些是我在學(xué)習(xí)動(dòng)態(tài)內(nèi)存分配時(shí)所記下的一些筆記,內(nèi)容不深,非常適合剛剛接觸c++內(nèi)存動(dòng)態(tài)分配的同學(xué)去看看,有什么不足的,希望大家諒解,我也是一名小學(xué)生,我會(huì)在日后多多深入學(xué)習(xí)c++寫出好的文章,望大家支持?。?!
本人不盛感激!??!