1樓:匿名使用者
1全部從概念上講。指標從本質上講就是存放變數地址的一個變數,在邏輯上是獨立的,它可以被改變,包括其所指向的地址的改變和其指向的地址中所存放的資料的改變。
而引用是一個別名,它在邏輯上不是獨立的,它的存在具有依附性,所以引用必須在一開始就被初始化,而且其引用的物件在其整個生命週期中是不能被改變的(自始至終只能依附於同一個變數)。
在c++中,指標和引用經常用於函式的引數傳遞,然而,指標傳遞引數和引用傳遞引數是有本質上的不同的:
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是一個地址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。
而在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參變數的地址。被調函式對形參的任何操作都被處理成間接定址,即通過棧中存放的地址訪問主調函式中的實參變數。正因為如此,被調函式對形參做的任何操作都影響了主調函式中的實參變數。
引用傳遞和指標傳遞是不同的,雖然它們都是在被調函式棧空間上的一個區域性變數,但是任何對於引用引數的處理都會通過一個間接定址的方式操作到主調函式中的相關變數。而對於指標傳遞的引數,如果改變被調函式中的指標地址,它將影響不到主調函式的相關變數。如果想通過指標引數傳遞來改變主調函式中的相關變數,那就得使用指向指標的指標,或者指標引用。
為了進一步加深大家對指標和引用的區別,下面我從編譯的角度來闡述它們之間的區別:
程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應地址。指標變數在符號表上對應的地址值為指標變數的地址值,而引用在符號表上對應的地址值為引用物件的地址值。符號表生成後就不會再改,因此指標可以改變其指向的物件(指標變數中的值可以改),而引用物件則不能修改。
最後,總結一下指標和引用的相同點和不同點:
★相同點:
●都是地址的概念;
指標指向一塊記憶體,它的內容是所指記憶體的地址;而引用則是某塊記憶體的別名。
★不同點:
●指標是一個實體,而引用僅是個別名;
●引用只能在定義時被初始化一次,之後不可變;指標可變;引用「從一而終」,指標可以「見異思遷」;
●引用沒有const,指標有const,const的指標不可變;
●引用不能為空,指標可以為空;
●「sizeof 引用」得到的是所指向的變數(物件)的大小,而「sizeof 指標」得到的是指標本身的大小;
●指標和引用的自增(++)運算意義不一樣;
●引用是型別安全的,而指標不是 (引用比指標多了型別檢查)
2樓:相思丶貓
& 取資料所在的地址,或者 引用
* 取地址中儲存的資料
3樓:沒肉的橘子
&是取地址符,
*表示指標。
int p = 12;
int* ptr = &p;
ptr = 地址.
*ptr = 12;
救命啊分不清現實還是夢境,救命啊!!!分不清現實還是夢境!!!!!!
就是因為你的血壓血糖低的原因 血壓血糖低經常會頭暈噁心 食療比較好 下面的資料是給你從網上找的 自己好好注意身體吧 1 蝦皮腐竹 腐竹250克,蝦皮20克,蒜頭一瓣,麻油 姜 精鹽 味精各適量。蝦皮加酒 水浸發並煮沸,腐竹冷水發後撕成細長條。油燒熱後爆香蒜茸 薑末 加入腐竹及蝦皮 連汁 煮沸調味 再...
我分不清這是友情還是愛情,我分不清這是友情還是愛情?
其實你沒必要去分的這麼清楚,他就算不愛你,但他對你那麼好,就好好珍惜吧。有個像哥哥一樣的朋友,也很好,有時候分的太清楚或許會傷害了自己和他人,或是引發出一系列本來不會有的麻煩。就算你現在知道了他愛你,可你以後又怎麼面對他呢,不會覺得很尷尬嗎?人活得糊塗點總是好的。我和你情況差不多。我覺得你還是把心態...
分不清玩笑話,敏感,心慌,沒有是非觀念,分不清好壞人,怎麼辦
姓天際的流星 得到什麼就會付出什麼,如果你真正擁有了果斷,那麼那個時候的你絕對不會想要。為什麼我沒有是非觀念? 秦漢風雲人物 這是沒有價值觀的重要表現,好壞不分,正邪不分,做事沒有自己的立場和看法,人云亦云就叫做沒有是非觀念。 你還是太年輕了 多在社會上歷練歷練相信會有幫助 首先你要懂得什麼叫是非,...