亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++入門(3)——使用new分配內存

2019-11-06 06:29:17
字體:
來源:轉載
供稿:網友

指針和數字

指針不是整型,雖然計算機通常把地址當作整數處理。指針描述的是位置,對兩個地址相乘并沒有意義。因此,不能簡單地將整數賦給指針

使用new來分配內存

對指針有一定了解之后,我們來看看它如何實現在程序運行時分配內存。前面我們將指針初始為變量地址只是為了描述指針的作用,而變量是在編譯時分配的有名稱的內存。指針真正的用處在于,在運行階段分配未命名的內存來儲存值。在C語言中,可以使用庫函數malloc() 來分配內存,在C++中仍然可以這么做,但有更好的方法new

int *a = new int;

new int告訴程序,需要適合存儲int的內存。new運算符根據類型來確定需要多少字節的內存。然后它找到這樣的內存,并返回其地址,將地址賦給a,a是被聲明指向int的指針,現在*a是存儲在那里的值。我們來看一下具體應用

#include <iostream> int main() { using namespace std; int nights = 1001; int * pt = new int; // allocate space for an int *pt = 1001; // store a value there cout << "nights value = "; cout << nights << ":location = " << &nights << endl; cout << "int values = " << *pt << ": location = " << pt << endl; double * pd = new double; // allocate space for a double *pd = 100001.0; // store a double there cout << "double value = " << *pd << ":location = " << pd << endl; cout << "location of pointer pd: " << &pd << endl; cout << "size of pt = " << sizeof(pt); cout << ":size of *pt = " << sizeof(*pt) << endl; cout << "size of pd = " << sizeof(pd); cout << "size of *pd = " << sizeof(*pd) << endl; return 0; }

結果如下

nights value = 1001:location = 0x7ffdd5606704 int values = 1001: location = 0x1034c20 double value = 100001:location = 0x1035050 location of pointer pd: 0x7ffdd5606708 size of pt = 8:size of *pt = 4 size of pd = 8size of *pd = 8

從中可以看到,雖然變量night 和指針*pt 指向的變量值相同,但一個是編譯時由系統分配的地址,另一個是我們通過 new 由系統分配的地址。而且我們發現,對于指針pd,我們還可以對它再求地址,就得到這個指針變量的地址。(可以理解為指針管理了一個變量的兩個方面——地址和值,而指針自己也有在內存中的存儲地址)

使用delete釋放內存

當需要內存時,可以使用new來請求,這只是C++內存管理數據包中有魅力的一方面。另一方面是delete 運算符在使用完內存后將其釋放給內存池(而不是其他語言的垃圾回收)

int *ps = new int; //allocate memory with new delete ps; // free memory with delete when done

這將釋放ps指向的內存,但不會刪除指針ps本身,例如可以將ps重新指向另一個新分配的內存塊。一定要配對地使用newdelete ,否則將發生內存泄漏(memory leak)。也就是說,被分配的內存再也無法使用了。

使用new來創建動態數組

如果程序只需要一個值,則可能會聲明一個簡單變量,但對于大型數據(如數組,字符串和結構),應使用new。假如一個程序,它是否需要數組取決于運行時用戶提供的信息。如果通過聲明來創建數組,則在程序被編譯時將為它分配內存空間。不管程序最終是否使用數組,數組都在那里,它浪費了內存。 下面來看一下使用new創建動態數組

int *arr = new int [10] // get a block of 10 ints delete [] arr; // 方括號代表釋放整個數組

new運算符返回第一個元素的地址,在這個例子中,該地址被賦給指針arr。那么如何訪問其中的元素呢?第一個元素不成問題,由于arr指向數組的第一個元素,還有9個元素,只需要把指針當作數組名使用就可以,arr[0] 是第一個元素,以此類推。(這里不需要*號)

#include <iostream> int main() { using namespace std; double *p3 = new double[3]; p3[0] = 0.2; // space for 3 doubles p3[1] = 0.5; // treat p3 like an Array name p3[2] = 0.8; cout << "p3[1] is " << p3[1] << "./n"; p3 = p3 + 1; cout << "Now p3[0] is " << p3[0] << " and "; cout << "p3[1] is " << p3[1] << "./n"; p3 = p3 - 1; // point back to beginning delete []p3; // free the memory return 0; }

我們看一下輸出

p3[1] is 0.5. Now p3[0] is 0.5 and p3[1] is 0.8.

從中可以知道,指針p3 被當作數組名來使用,p3[0] 為第一個元素,依次類推。將p3加1導致它指向第二個元素而不是第一個,將它減1之后,指針指向原來的值,這樣程序便可以給delete[]提供正確的地址。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩三级影视基地| 日韩精品中文字幕视频在线| 欧美视频免费在线| 91在线视频精品| 国产aaa精品| 在线日韩中文字幕| 少妇高潮久久77777| 91wwwcom在线观看| 中文字幕精品一区二区精品| 欧美性生活大片免费观看网址| 精品久久香蕉国产线看观看亚洲| 午夜美女久久久久爽久久| 欧美人交a欧美精品| 亚洲电影免费观看高清| 欧美日韩午夜剧场| 欧美在线视频免费| 成人a免费视频| 日韩欧美在线网址| 亚洲黄色在线观看| 日韩高清av一区二区三区| 日本精品久久电影| 日本精品久久中文字幕佐佐木| 夜夜嗨av一区二区三区免费区| 最新的欧美黄色| 欧美激情精品久久久久久久变态| 日韩在线www| 欧美性猛交xxx| 精品中文字幕在线| 亚洲男人天堂网站| 国语自产精品视频在线看抢先版图片| 欧美精品制服第一页| 97成人精品视频在线观看| 日韩av最新在线观看| 日韩国产精品亚洲а∨天堂免| 国产欧美一区二区三区久久| 欧美性猛交xxxx免费看久久久| 福利二区91精品bt7086| 欧美日韩中文在线观看| 欧美在线中文字幕| 亚洲免费电影一区| 久久久噜噜噜久久中文字免| 中文字幕不卡在线视频极品| 亚洲精品v欧美精品v日韩精品| 久久久久在线观看| 日韩在线中文视频| 国产精品91在线| 国产精品爽黄69天堂a| 欧美成人精品xxx| 91极品女神在线| 欧美一级淫片播放口| 欧美大片免费看| 国产在线一区二区三区| 亚洲精品日韩在线| 国外色69视频在线观看| 国产精品白丝av嫩草影院| 成人美女免费网站视频| 91精品国产网站| 欧美日韩亚洲高清| 136fldh精品导航福利| 91亚洲永久免费精品| 中文欧美在线视频| 91社影院在线观看| 国产精品视频一区二区高潮| 一级做a爰片久久毛片美女图片| 91日韩在线播放| 亚洲深夜福利视频| 久久久久久久久久婷婷| 欧美综合激情网| 欧美老女人性视频| 亚洲成av人乱码色午夜| 高清欧美电影在线| 亚洲精品黄网在线观看| 北条麻妃在线一区二区| 色青青草原桃花久久综合| 久久久久久国产精品久久| 亚洲欧美日韩中文在线| 国产午夜一区二区| 成人字幕网zmw| 国产精品中文字幕在线| 亚洲福利视频免费观看| 国产性色av一区二区| 久久av红桃一区二区小说| 在线看日韩av| 亚洲精品美女在线| 欧美一性一乱一交一视频| 日韩中文字幕欧美| 欧美在线播放视频| 国产日韩欧美综合| 精品久久久久久久久国产字幕| 亚洲精品国偷自产在线99热| 中文字幕少妇一区二区三区| 亚洲国产精久久久久久| 亚洲变态欧美另类捆绑| 久久免费观看视频| 中文欧美在线视频| 81精品国产乱码久久久久久| 欧美激情综合色综合啪啪五月| 国产午夜精品久久久| 久久伊人91精品综合网站| 色噜噜狠狠狠综合曰曰曰| 国产精品亚洲精品| 国产精品国语对白| xxav国产精品美女主播| 国产在线拍偷自揄拍精品| 久久久国产影院| 欧美成人亚洲成人日韩成人| 日韩在线视频观看正片免费网站| 日韩美女免费观看| 蜜月aⅴ免费一区二区三区| 国产成人精品久久二区二区| 国产精品免费小视频| 欧美日韩亚洲天堂| 成人免费看片视频| 亚洲福利视频网站| 中文字幕精品www乱入免费视频| 国产精品偷伦免费视频观看的| 国产精品狼人色视频一区| 欧美做受高潮电影o| 久久久亚洲精品视频| 亚洲综合日韩中文字幕v在线| 亚洲第一福利网| 黄色精品一区二区| 国产精品对白刺激| 欧美成人中文字幕| 久久精品欧美视频| 精品国产31久久久久久| 亚洲男人av电影| 成人在线激情视频| 日韩激情视频在线| 久久天天躁夜夜躁狠狠躁2022| 精品久久久久久国产| 日本午夜在线亚洲.国产| 中文字幕国产亚洲2019| 日韩禁在线播放| 欧美在线视频在线播放完整版免费观看| 久久99视频免费| 国产精品久久久久久亚洲调教| 午夜精品99久久免费| 久久福利视频网| 不卡在线观看电视剧完整版| 国产精品欧美亚洲777777| 成人免费视频97| 日本aⅴ大伊香蕉精品视频| 国产精品成人av性教育| 国产精品久久久久久久久久新婚| 国产欧美中文字幕| 97精品一区二区视频在线观看| 亚洲精品mp4| 亚洲乱码国产乱码精品精天堂| 国产日韩欧美电影在线观看| 色综合伊人色综合网站| 岛国av在线不卡| 成人国产精品免费视频| 日韩精品视频中文在线观看| 久久在线观看视频| 亚洲欧美自拍一区| 日韩精品中文字幕有码专区| 国产美女精品视频免费观看| 97视频免费观看| 少妇激情综合网| 欧美日韩中文字幕综合视频| 欧美激情精品久久久久| 精品亚洲一区二区三区| 久久99视频精品|