資源描述:
《W08-指針指針和指針變量》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、指針是C++的精華,也是學(xué)習(xí)的重點(diǎn)和難點(diǎn)正確地使用指針可編寫簡(jiǎn)潔、高效和通用的程序。錯(cuò)誤的使用指針易使程序運(yùn)行出錯(cuò)或?qū)е孪到y(tǒng)崩潰第8章指針8.1指針和指針變量8.2指針和數(shù)組8.3指針數(shù)組和指向指針的指針8.4指針和函數(shù)8.5new和delete運(yùn)算符8.6引用和其他類型的指針8.7簡(jiǎn)單鏈表及其應(yīng)用第8章指針教室必須有編號(hào),也就是教室的地址。以保證正常的教學(xué)管理。8.1指針和指針變量——基本概念例如,現(xiàn)在1-2節(jié)是我們上課,在教三402。3-4節(jié)可能是020095班,教室中上課的班級(jí)可以變化,但在教三402始終對(duì)應(yīng)著這間教室。與教室類似,計(jì)算機(jī)中的存儲(chǔ)單元也具有這樣
2、的性質(zhì)。每個(gè)單元都必須有它的地址,以及存放在存儲(chǔ)單元的內(nèi)容。由于讀、記代碼很麻煩,因此,C++就將代碼翻譯成人所熟知的自然語(yǔ)言符號(hào)。這些符號(hào)就是代表某個(gè)存儲(chǔ)單元的變量名或者稱為標(biāo)識(shí)符。試想,教室的編碼如果是這樣0x0065FDE4,你是否會(huì)用這個(gè)編碼來(lái)管理教室呢?但這個(gè)編碼就是計(jì)算機(jī)內(nèi)存的地址碼。402教室地址教室內(nèi)容教三02A106現(xiàn)在假設(shè),把地址編碼為107的單元用標(biāo)識(shí)符a(如:稱作C++專用教室)代替,那么,a就代表了這個(gè)單元的地址。在C++中,它就是所謂的變量名。107單元地址單元內(nèi)容在算法中,執(zhí)行含有變量名為a的語(yǔ)句或表達(dá)式時(shí),C++首先會(huì)訪問(wèn)a所代表的單
3、元地址,這個(gè)過(guò)程稱為尋址。顯然,如果單元沒(méi)有地址,C++就無(wú)法找到這個(gè)單元。那么,單元的地址還有其它尋訪辦法嗎?為了回答這個(gè)問(wèn)題,我們?cè)賮?lái)探討教室的管理。a8.1指針和指針變量——基本概念一幢樓有若干個(gè)教室,如果臨時(shí)要找一個(gè)教室來(lái)上大課,一種辦法是逐個(gè)尋找哪個(gè)教室空閑,這當(dāng)然很費(fèi)事。還有一種辦法,是到管理教室的教務(wù)室去查找。教務(wù)室的墻壁上有一個(gè)大布袋,它上面分布了全校所有教室的代號(hào)——地址代碼。盡管這個(gè)布袋子上不可能有教室空間,但通過(guò)訪問(wèn)它上面的教室地址就可了解各個(gè)教室的使用信息。例如.........................................
4、...................存放教室地址的布袋子10601班107空顯然,把教室地址存放在布袋上的辦法為教室管理提供很大方便8.1指針和指針變量——基本概念............................................................這種管理和訪問(wèn)教室的辦法,也被C++的設(shè)計(jì)者采用,它們把類似于存放教室地址的小口袋稱為指針變量。存放教室地址的布袋子C++中,指針是內(nèi)存單元的地址。根據(jù)以上類比分析,指針變量只能存放變量的地址(指針),而不能存放一般的數(shù)據(jù)(學(xué)生)。10601班107空指針這就象布袋上的小口袋只能存放教
5、室的地址,而不可能讓學(xué)生坐在上面上課的性質(zhì)一樣。下面來(lái)介紹指針變量的定義和使用。8.1指針和指針變量——基本概念指針變量的定義方式如下:306a307xint*p1;float*p2;inta;floatx;p1306307C++是這樣給p1、p2分配單元從單元圖形可知,指針變量是專用于存放變量地址的。圖中的箭頭是為便于形象地描述而加的。如果再定義普通變量a、x:并且在算法中有如上語(yǔ)句:...p1=&a;p2=&x;那么,執(zhí)行語(yǔ)句的結(jié)果是:p2可以這樣來(lái)描述它們的關(guān)系:指針p1指向變量a,p2指向變量x。8.1指針和指針變量——指針變量的說(shuō)明指針變量的定義方式如下:
6、306a307xint*p1;float*p2;inta;floatx;p1306307C++是這樣給p1、p2分配單元圖示可知,賦值語(yǔ)句是把普通變量的單元地址分別存放到指針變量p1、p2中。這相當(dāng)于把教室的代號(hào)放在布袋里。...p1=&a;p2=&x;p2上述賦值語(yǔ)句中,&是取地址運(yùn)算符,表示取變量a和x的地址。運(yùn)算過(guò)程是:先由&取出變量的地址,然后把地址碼賦給指針變量。指針變量的命名除與普通變量相同之外,定義時(shí)還必須在左邊加一個(gè)*,以示被定義的是指針變量,但在算法中卻沒(méi)有*。8.1指針和指針變量——指針變量的說(shuō)明指針變量的定義方式如下:306a307xint*p
7、1;float*p2;inta;floatx;p1306307C++是這樣給p1、p2分配單元...p1=&a;p2=&x;p2在算法中,指針變量的左邊帶*,表示所指單元的內(nèi)容。例如*p1=5;*p2=5.0;雖然都寫成*p1和*p2,但定義語(yǔ)句中的*是告訴編譯系統(tǒng):p1、p2是指針變量這相當(dāng)于:a=5;x=5.0;55.0*p1*p2算法語(yǔ)句中的*則表示*p1和*p2是指針?biāo)竼卧膬?nèi)容。8.1指針和指針變量——指針變量的說(shuō)明指針變量的定義方式如下:306a307xint*p1;float*p2;inta;floatx;p1306307C++是這樣給p1、p2