簡要陳述指針的優(yōu)缺點_第1頁
簡要陳述指針的優(yōu)缺點_第2頁
簡要陳述指針的優(yōu)缺點_第3頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、簡要陳述指針的優(yōu)缺點C 語言的精華和靈魂是指針,但運用的時候卻比擬容易出錯。C+ 又引入了 “引用的概念, 然而在使用過程中很難分清楚它們之間的區(qū)別, 本文結合編程實 例,簡單分析 了引用和指針的不同之處。指針和引用看起來完全不同 指針用操作符 '*' 和引用使用操作符, 但他們似 乎 都有同樣的功能。 指針和引用都是讓你對其他對象的實現(xiàn)間接引用。 你如何決 定在何時 使用指針, 在何時使用引用呢?首先, 我們必須要認識到在任何情況下 都不能使引用的 指向為空值。 一個引用必須總是指向某些對象。 因此,如果你定 義一個變量并讓它指向 一個對象, 但是該變量在某些時候也可以不指向

2、任何對 象,這時你應該把變量聲明為指針, 因為指針可以為空值。 相反,如果變量必須 指向一個對象, 例如你的設計不允許變量為空, 這時你就應該把變量聲明為引用。一、指針和引用的概念指針其實是一個特殊的變量, 它里面存儲的本質(zhì)上是一個內(nèi)存地址。 弄清指 針需要 了解指針的四方面的內(nèi)容: 指針的類型, 指針所指向的類型, 指針的值或 者叫指針所指 向的內(nèi)存區(qū),還有指針本身所占據(jù)的內(nèi)存區(qū) °C+ 語言規(guī)定可以在 程序中定義整型變量、 實型變量和字符型變量等,也可以定義一種特殊的變量, 專門用于存放變量地址。通過變 量 b 找到變量 a 的地址,再根據(jù)這個地址找到變 量 a, 這就是我們所說

3、的“間接訪問方式。 由于通過地址能找到所需的變量單 元,所以可以說,地址“指向該變量單元。一個變量 的地址稱為該變搖的“指 針。如果有一個變量專門用來存放另一變量的地址 即指針 , 那么它稱為“指針 變量。引用:引用,一個變量的別名, 為什么引入別名呢?原因是我們想定義一個 變量, 他共享另一個變量的內(nèi)存空間, 使用別名無疑是一個好的選擇。 變量是什 么?是一個內(nèi) 存空間的名字, 如果我們給這個內(nèi)存空間在起另外一個名字, 那就 是能夠共享這個內(nèi)存 了引用別名的由此而來。引用的定義方法與定義指針 相似,只是用&代替了 *。例如:Poi nt pl4, 4 :Point&p2=pl

4、 ;定義了 pl 為 pl 的 引用。引用在定義時必須立即被初始化,因 為引用只是某個東西的同義詞。二、指針與引用的存儲方式1. 指針變量的存儲方式編譯執(zhí)行void main(void)int ia-12 ;int ib=45? * cout<AA4ia : "Fvv&ia<<* tia: *<< avvendl ;cout<<*4ib 1*?&it>? ib;J'?ib? end!:int *i plf *ip2tipf-fiiLatip2=&ib?coutvv*4ipi s*vv?liplvvipl

5、;*vviplvv*r*Lplj*vv*iplvvendl ;cow t?*fcip2i * ? 4ip2?r ip21 * ? ip2vv*, *ipl J *vv*iplvvendl:我們定義了兩個指向整數(shù)類型的指針 ipl 、ip2 ,讓它們分別指向 iaAib ,輸出 它們各 自在內(nèi)存中的地址,指針的值,和指針所指向的地址里面的值。 程序的執(zhí) 行結果如下:4ia E0xO012FF7C,iBil2 &ibtOxOQ12FF78.ib>45 tipi:0xO012FF74,iplt 0x0012FF7C,*ipl :12 &ip2 :0x0012FF70r ip2&

6、gt;0x0012FF78 r *ipli12我們發(fā)現(xiàn) ipl 和 ip2 的地址和 ia 、ib 不同,這說明指針變量和其他的變量一樣,都有自己獨立的地址空間。而指針的值恰好是一個地址,這個地址就是ia和 ib 變量的地址。地址里的值就是 ia 和 ib 的值。原來 : 指針變量和其他的變量一 樣,都 有自己獨立的地址空間,它里面的值不是真正的值,而是一個地址,系統(tǒng)通過這個地址,才能找到真正需要的值,是一種間接的尋址方式。2引用變量的存儲方式(編譯執(zhí)行)void main(vold)int ia=12 :int ib=45 :coutvv*? Aia?*ia : *?i&? endl

7、ic&ut?*&ib : *vvaib?ibi*? ibvvendl ;int iiyi-ia ;int &iy2=ib :C0Ut?*4iylr*? iiylvv*tiyirvviyKvendl?cout?Aiy2/vv&iy2? *,iy2 : "?iy2?endl:我們定義了兩個整數(shù)類型的引用變量 iyl 、iy2 ,分別聲明為 ia 、ib 的引用。 輸出結&ia ; OxO012FF7rCia ;12&ib :OxQ012FF7S,ib;45iiyl :Ox0012FF7C,iyl :12&iy2 :Ox0012FF7

8、8,iy2 :45我們發(fā)現(xiàn) iyl.iy 的地址與 ia 、 ib 完全相同,且值也相等??梢娤到y(tǒng)并沒有為 iyl 和 iy2 分配單獨的地址空間, iyl 和 iy2 只是作為 ia 和 ib 的別名,這就是引用 的存儲機制。三、對象指針和對象引用作函數(shù)的參數(shù)1對象指針作函數(shù)的參數(shù)使用對象指針作為函數(shù)參數(shù)要經(jīng)使用對象作函數(shù)參數(shù)更普遍一些。因為使用對象指針作函數(shù)參數(shù)有如下兩點好處:(1) 實現(xiàn)傳址調(diào)用??稍诒徽{(diào)用函數(shù)中改變調(diào)用函數(shù)的參數(shù)對象的值,實現(xiàn)函數(shù)之間的信息傳遞。(2) 使用對象指針實參僅將對象的地址值傳給形參,而不進行副本的拷貝,這樣可以提高運行效率,減少時空開銷。當形參是指向?qū)ο笾羔?/p>

9、時,調(diào)用函數(shù)的對應實參應該是某個對象的地址值,一般使用&后加對象名。2對象引用作函數(shù)參數(shù)在實際中,使用對象引用作函數(shù)參數(shù)要比使用對象指針作函數(shù)更普遍,這是因為使用對象引用作函數(shù)參數(shù)具有用對象指針 作函數(shù)參數(shù)的優(yōu)點,5prcinotpy;i fun (PTQ):pr而用對象引用q- print (J 5 作函數(shù)參數(shù)將更簡單,更直接。所以,在 C+ Jvoid fun(M ml <M 編程中,人們喜歡用對象引用作函 數(shù)參數(shù)。現(xiàn) ml.setxy (12.15)c舉一例子說明對象引用作函數(shù)參數(shù)的格式。m2.setxy (22A25)j I需出站杲為;5訂ttincludAClostre

10、am. h>22,25liIpubl iiMO (K=yA0JM Ci at i i i n t j) jc=i-y = j s)voi A copy (M -void setjcx(init i int jj ls=isy=j$ void print () cout<<x? *>"*? ¥<<wdli J privatesi nt K = tvold CQpy(M(x-n, xt&ni.2)-x=ra? yivoid f un(M voidl marn ()四、總結相同點:都是地址的概念; 指針指向一塊內(nèi)存, 它的內(nèi)容是所指內(nèi)存的地址; 而引 用那么是某塊內(nèi)存的別名。不同點:(1) 指針變量在邏輯上是獨立的,可以改變它所指向的地址和其指向的地址 中所存放 的數(shù)據(jù),即指針可以 ' 見異思遷。而引用它在邏輯上不是獨立的, 引用必須在一開 始就被初始化,而且其引用的對象在其整個生命周期中是不能被改變 的 (即引用從一而終 )。(2) 引用不能為空,指針可以為空; “sizeof 引用得到的是所指向的變量 (對象) 的大小,

溫馨提示

  • 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

提交評論