C中的指針用法總結(jié)_第1頁
C中的指針用法總結(jié)_第2頁
C中的指針用法總結(jié)_第3頁
C中的指針用法總結(jié)_第4頁
C中的指針用法總結(jié)_第5頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、C+中的指針用法總結(jié)出處:多特軟件站 時間:2011-06-24 人氣:45我要提問我來說兩句核心提示:C+程序設計重要基礎就是類和對象,對象指針是很重要的一部分C+程序設計重要基礎就是類和對象,對象指針是很重要的一部分,包括指向?qū)ο蟮闹羔?、指向?qū)ο蟪蓡T的指針、this指針、指向?qū)ο蟮某V羔?、指向常對象的指針等?、指向?qū)ο蟮闹羔樁x:對象空間的起始地址就是對象的指針。說明:在建立對象時,編譯系統(tǒng)就為每個對象分配一定的存儲空間以存放其成員,不過注意,在一般情況下不同對象的數(shù)據(jù)存儲單元中存放的數(shù)據(jù)成員是不相同,而不同對象的函數(shù)代碼卻是相同的,也就是說,它們的函數(shù)代碼是共享的。這時我們可以定義一個

2、指針變量用來存放對象的指針。定義指向類對象的指針變量的一般形式是:類名 *對象指針名;如對于與個Time類對象,我們可以有: 我們就可以通過對象指針訪問對象和對象的成員,假如所定義的類中有數(shù)據(jù)成員hour、minute、sec,成員函數(shù)有gettime(),則(*p).hour 即為p指向?qū)ο笾械膆our成員,相當于t.hour(*p).gettime() 即為p指向?qū)ο笾械某蓡T函數(shù)gettime(),相當于t.gettime()也可以用如下形式:p->hour 和 p->gettime()和上面是等價的。2、指向?qū)ο蟪蓡T的指針(1)指向?qū)ο髷?shù)據(jù)成員的指針在C中我們學過指向普通變量

3、的指針變量,在C+中定義指向?qū)ο髷?shù)據(jù)成員的指針變量的方法和定義指向普通變量的指針變量方法相同,其一般形式為:數(shù)據(jù)類型名 *指針變量名;如: (2)指向?qū)ο蟪蓡T函數(shù)的指針定義指向?qū)ο蟪蓡T函數(shù)的指針變量和定義指向普通函數(shù)的指針變量不同。在定義指向普通函數(shù)的指針變量時我們可以這樣定義: 然而編譯系統(tǒng)要求在將函數(shù)地址賦給指針變量時必須滿足三個條件:函數(shù)參數(shù)類型及個數(shù)要匹配函數(shù)返回值的類型要匹配所屬的類要匹配顯然在上面的p與類是無關的。為了滿足第三條,我們可以為指針指定類,故定義指向?qū)ο蟪蓡T函數(shù)的指針變量一般形式為:數(shù)據(jù)類型(類名:*指針變量名)(參數(shù)表列);可以讓指針指向公用的成員函數(shù),如: 注意:因

4、為成員函數(shù)不存放在對象空間中,多個同類對象共享此成員函數(shù)代碼,所以在將成員函數(shù)的入口地址賦給指針變量是應寫成:指向?qū)ο蟪蓡T函數(shù)的指針變量=&類名:成員函數(shù)名;在成員函數(shù)名后面沒有"()",如果寫成p=&Time:gettime()是錯誤的。nextp3、this指針在每個成員函數(shù)中都包含了一個特殊的指針,稱為this,它是指向本類對象的指針,它的值是當前被調(diào)用成員函數(shù)所在對象的起始地址。之所以有這個指針,是因為為了保證同類的不同對象的成員函數(shù)引用的是指定對象中的數(shù)據(jù)成員,它是系統(tǒng)自動實現(xiàn)的。如定義一個求體積的函數(shù) 假如已經(jīng)定義了對象t,當調(diào)用成員函數(shù)t.vo

5、l()時,編譯系統(tǒng)就把對象t的起始地址賦給this指針,于是在成員函數(shù)引用數(shù)據(jù)成員時,根據(jù)指針this就可以引用到對象t的數(shù)據(jù)成員。所以C+把上面的函數(shù)處理成 由于this的值是當前被調(diào)用成員函數(shù)所在對象的起始地址,所以可以寫成 所以在調(diào)用成員函數(shù)t.vlo()時,實際的調(diào)用方式為t.vol(&t),不過對象t的地址傳給this指針是由系統(tǒng)自動完成的,不需人為加上。4、指向?qū)ο蟮某V羔槍⒅赶驅(qū)ο蟮闹羔樧兞柯暶鳛閏onst型且進行處始化,這樣指針值始終保持為其初值,不能改變其指向。如: 由上面我們可以看出定義指向?qū)ο蟮某V羔樀囊话阈问綖椋侯惷?*const 指針變量名=對象的起始地址;注

6、意:指向?qū)ο蟮某V羔樧兞康闹挡荒芨淖?,但可以改變它所指向?qū)ο笾械臄?shù)據(jù)成員的值。常指針一般用作函數(shù)的參數(shù),這樣就不允許在函數(shù)執(zhí)行過程中改變指針變量的值,使其始終保持指向原來的對象。5、指向常對象的指針變量首先回顧一下指向常變量的指針變量,其一般形式為:const 類型名 *指針變量名;如: 如果一個變量已經(jīng)被聲明為常變量,那么只能用指向常變量的指針變量去指向它,而不能用一般的指針變量。另外,指向常變量的指針變量除了可以指向常變量外,還可以指向未被聲明為const的變量,但也不能通過該指針改變其值。例如: 說明:上例中,指針變量p指向字符變量c,并不說把c也聲明成常變量,而只是說在通過指針變量引用

7、c時,c具有常變量的特征,其值是不能改變的,但c仍然是一個普通變量。在指向常變量的指針中,關于函數(shù)形參的指針類型有幾點值得注意:如果函數(shù)形參是非const型指針變量,實參只能用指向非const型指針;如果函數(shù)形參是指向const型變量的指針,實參則可以是const型的或非const型的指針變量。換句話說就是指向常變量的指針可以指向const和非const型的變量,而指向非const型變量的指針只能指向非const的變量。用指針變量作形參時形參和實參的對應關系表: 下面說到正題,指向常對象的指針變量和指向常變量指針變量類似。如果一個對象已經(jīng)被聲明為長對象,只能用指向常對象的指針變量指向它,而不能用一般的指針變量指向它。如果定義了一個指向常對象的指針變量且使它指向一個非const的對象,其指向的對象不能通過指針來改變。如果定義了一個指向常對象的指針變量,是不能通過它改變所指向的對象的值的,但是指針變量本身的值是可以改變的。如: 所以當我們希望在調(diào)用函數(shù)時對象的值不被修改,我們就可以把形參定義為const型的指針變量,同時用對象的地址作實參(對象可以是const或非const型);當要求對象不僅在調(diào)用函數(shù)中不被改變,而且在程序執(zhí)行過程中也不發(fā)生

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論