指针以及内存分配
原文:http://blog.csdn.net/bizhu12/article/details/6532235
1. 指針很靈活,這使得指針很難管理,在定義指針時(shí),將在棧中開辟一塊內(nèi)存存放指針的地址(棧內(nèi)的內(nèi)存由系統(tǒng)分配和釋放),指針的地址內(nèi)存只是存放指針的地址,不存放指針指向的數(shù)據(jù),值得注意的是,定義指針時(shí)指針會(huì)隨機(jī)指向一塊內(nèi)存,如int? *p;p會(huì)指向一塊不為空的內(nèi)存,相當(dāng)危險(xiǎn),例如執(zhí)行判斷if(!p){ printf("p為空");};這里不會(huì)輸出"p為空";所以在定義時(shí)想讓指針p為空,則要int? *p = NULL;如果程序大的話,執(zhí)行的結(jié)果出錯(cuò)都不知道在哪里.
?
2. 給指針賦值,我能力有限,只知道有兩種,一種是在堆上分配一塊內(nèi)存(動(dòng)態(tài)分配內(nèi)存),讓指針指向這塊內(nèi)存.第二種是指針指向棧上的一塊內(nèi)存(一般是定義一個(gè)非指針變量,讓指針指向這個(gè)變量);這兩種方法通過(guò)以下代碼實(shí)現(xiàn):
?
[cpp]?view plaincopy?
?
3. 不知道你是否知道我為什么沒(méi)有在第二種方法后也加free(p2)?如果加了free(p2)編譯器會(huì)報(bào)內(nèi)存錯(cuò)誤,因?yàn)閜2指向的是i內(nèi)存,i的內(nèi)存是在
棧上,棧上的內(nèi)存都是由系統(tǒng)管理,如分配和釋放,不需要手動(dòng)管理,這里使用free(p2)是在釋放i的內(nèi)存,這塊內(nèi)存不需要你管,你卻使用free()管理當(dāng)然會(huì)報(bào)錯(cuò),
?
4. 動(dòng)態(tài)分配內(nèi)存,在C語(yǔ)言中是使用malloc()分配和使用free()釋放,在C++中,是使用new分配和delete釋放,都是在堆上分配,malloc()括號(hào)內(nèi)是內(nèi)存的大小,是size_t(unsigned int)類型,free()括號(hào)內(nèi)是內(nèi)存的地址或是指向這塊內(nèi)存的指針,new是C++的重載函數(shù),new+大小,
delete+地址;具體的用法看代碼:
?
[c-sharp]?view plaincopy?
?
第二種方式我依次輸入的是56,78,23,下圖是p2的存儲(chǔ)方式
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhizhan/p/4570405.html
總結(jié)
- 上一篇: 做梦梦到公鸡要啄自己是怎么回事
- 下一篇: 梦到结婚当天什么都没准备好