溫習C C 筆記 2 指標和引用的區別

2021-06-08 03:03:38 字數 1165 閱讀 6525

首先看一段**以及執行結果,我將結合該段**講解指標和引用的兩點區別:

//

// main.cpp

// testc++02

//// created by fei dou on 12-7-29.

//#include #include using namespace std;

int main (int argc, const char * argv)

其執行結果如下:

本段程式很簡單,不過當你讀了**和輸出結果之後可能覺得第三組結果有點怪異,

相信很多人會覺得第三組第二行的輸出結果應該是"i am a ****** string object",而不是

「i am a ****** string object too」。

但是,結果為什麼不是我們想象的那樣啊?**出了問題?(當然了,如果你已經知道原因,就沒有必要閱讀下面的文字了

問題的原因就在於c++ 中指標和引用的微妙差別,而這的差別主要有兩點:

1.引用總是指向某乙個物件,定義引用時不進行初始化是錯誤的。而且其關聯物件是不可以改變的,始終與定義初始化的時候一致。

2.賦值行為的差異,給引用賦值的結果是修改該引用所關聯的物件的值,而不是將引用與另外乙個物件關聯。

這裡,第二條有點讓人迷惑,搞不清楚最後到底是修改了什麼。好的,現在結合上面的**來解釋:

sref = str2;

cout << sref << endl;

cout << str1 << endl;

這裡,首先sref = str2;語句是乙個對引用的賦值,sref是字串str1的引用。執行賦值操作以後我們發現

cout << str1 << endl;的輸出結果變成了str2的內容,而不再是str1本來的內容,這是因為對於引用的賦值

操作修改了str1物件的值,而不是讓sref和str2關聯。

最終的結果就是sref仍然是和str1關聯,同時str1的內容被修改為str2。

這就是上面第二天的區別,或許現在你已經有點頭緒了,也希望這篇短文章能給你

帶來一些幫助。

1 指標和引用的區別

1 什麼是指標?2 什麼是引用?引用 引用是乙個物件的別名,主要用於函式引數和返回值型別,符號x 表示x型別的引用。1 引用不可以為空,但指標可以為空。引用是物件的別名,引用為空 物件都不存在,怎麼可能有別名!所以定義乙個引用的時候,必須初始化。宣告指標是可以不指向任何物件,因此,使用指標之前必須做...

1 指標和引用的區別

性質上的區別 使用上的區別 引用必須要初始化且不能是null,而指標可以是null。且指標的值可以改變,引用不能改變 更像是const,常量指標的概念 有const指標,但沒有const引用 指標可以有多級 p 引用只有一級 sizeof引用 得到的是所指向的變數 物件 的大小,而 sizeof指標...

5 指標 引用的區別

函式傳值的三種方式 傳值 傳引用 傳指標 相同點 都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 引用是某塊記憶體的別名。區別 1.指標是乙個實體 在棧空間有自己的記憶體空間 而引用僅是個別名 不佔記憶體空間 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次...