C 中引用與指標的區別

2021-09-30 07:07:27 字數 2059 閱讀 7779

一、引用

何為引用呢?其實概念很簡單,就是乙個變數的別名,操作這個別名,如同操作原物件(變數),實現的效果是一樣的!舉個簡單又能說明問題的例子,就像乙個人的 小名一樣。他既可以叫張強,亦可以稱呼其小強。

那如何宣告引用呢?舉個例子:

int a= 30;

int &b = a;   // "&" 這個符號在這裡的意思就是取乙個變數引用的意思,起個變數的別名。

▲雷區:

引用的宣告必須同時被初始化,且引用一旦被初始化,則不可再次更改指向。《一夫一妻制,別妄想著享受夜夜睡新娘了!o(∩_∩)o ~~ 開玩笑!>記得上學那會,有同學會問,引用是不是僅僅作用於變數上,物件不可以被引用嗎?答案是肯定的,是可以的。

int &c;

c = a;//這樣的語法是錯誤的。

二、指標

何為指標呢?概念也很簡單,指標是乙個指向變數或者物件的記憶體位址的位址值。指標指向可以隨時更改,前提該指標不是野指標!如果你還有些茫然或者理解不了,請參閱相關技術書籍大哥!

宣告指標可以一開始不用初始化,但是你如果不想惹不必要的麻煩的話,阿艦懇請您初始化一下吧,又累不死你!例如,下邊有三種初始化的方法:

(1)   int *p = null;  

(2)   int *p;

p = null;

(3)   int a = 20;

int *p = &a;

不僅僅是指標,建議您需要初始化,當您建立變數或者物件的時候,您最好也要初始化,這是一種程式設計規範。可以有效避免不必要的麻煩!

▲雷區:

注意野指標(也有人稱之為迷途指標,指的一回事!)。

int *p = new int;

*p = 20;

delete p;

*p = 30;

這裡的這個指標就是所謂的野指標了。依據**,給出定義:如果原指標被delete掉後,你還用原來那個指標,那麼你當前使用的指標就是野指標了。後果很嚴重,程式會崩潰!小心哈!

那有人會問,如何避免這一糟糕事件的發生呢! 嘿嘿,很簡單,當你刪除之後,將其滯空,不再用它就歐了!

規範**:

int *p = new int;

*p = 20;

delete p;

p = null;

這裡其實大家還應該注意這樣乙個細節,當你刪除該指標後(沒將其滯空),其實該指標還是指向起初的記憶體位址,只不過該記憶體上的資料已經不是原來指向的資料了,往往編譯器會將該位置重新分配給新的資料使用。最好是緊接著將其滯空為妙!少惹事吧大哥,對你有好處的!

有關指標與陣列,指標與函式,指標與物件,指標與類間的關係,由於時間關係,請您自行參閱相關技術書籍!人家比我也講的好!

三、 基礎完了,言歸正傳,現在談一下,引用與指標的區別:

你現在已經知道了,引用實質上是被引用物件或者變數的別名而已,實際上也僅此而已,操作該物件,也等同於操作原物件本身乙個性質。

指標很隨意,可以隨時指向,前提不是野指標。

那這兩者到底有什麼區別呢?

(1) 指向限制:

引用必須宣告+初始一塊幹;(一夫一妻制)

指標很靈活,可以隨時更改指向,如果其不是野指標的話。(一夫多妻制)

(2) 可否為null :

不能有null引用,引用必須與合法的儲存單元建立聯絡;

指標可以為null。

用途:有人肯定會好奇,學會引用或者學會指標,有什麼用武之地嗎?回答,那是必須的。不然誰會煞費苦心的設計沒用的廢物出來呢!

能體現引用價值的地方,一般常用於兩處,函式引數和引數的返回值。 對於作為函式引數來說,可以避免編譯器對其記憶體拷貝,更重要的是,操作該引用如同在函式外部操作原物件一樣的輕而易舉,避免引數壓棧,提高執行效率;作為函式的返回值來說,不得返回區域性引用。

對了,還需要說明一下,究竟什麼時候使用引用的問題:

1、傳遞的是乙個大的物件

2、想使用址傳遞外部變數,以使其更改

3、拷貝建構函式、複製建構函式的引數

4、返回 類資料成員(白話就是類物件)

明晚發表常量、靜態變數相關,敬請期待!

好了,先聊到這吧,明晚繼續~~~ 寫這個還很耗時的~~~

2023年8月7日 下午

阿艦         於日照

C 中引用與指標的區別

1 從現象上看 指標在執行時可以改變其所指向的值,而引用一旦和某個物件繫結後就不再改變。2 從記憶體分配上看 程式為指標變數分配記憶體區域,而引用不分配記憶體區域。3 從編譯上看 程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應位址。指標變數在符號表上對應的位址值為指標...

C 中引用與指標的區別

指標和引用都是 c 中的基本語法成份,它們既有聯絡,也有不同之處。下面給出幾段 例項加以說明 include include using namespace std 使用指標交換資料 使用引用改變資料 引用作為函式引數進行傳遞時,實質上傳遞的是實參本身,即傳遞進來的不是實參的乙個拷貝,因此對 形參的...

C 中引用與指標的區別

1 當引用被建立時,它必須被初始化。而指標則可以在任何時候被初始化。2 一旦乙個引用被初始化為指向乙個物件,它就不能被改變為對另乙個物件的引用。而指標則可以在任何時候指向另乙個物件。3 不可能有null引用。必須確保引用是和一塊合法的儲存單元關聯。進一步解析 指標和引用都是 c 中的基本語法成份,它...