一、引用
何為引用呢?其實概念很簡單,就是乙個變數的別名,操作這個別名,如同操作原物件(變數),實現的效果是一樣的!舉個簡單又能說明問題的例子,就像乙個人的 小名一樣。他既可以叫張強,亦可以稱呼其小強。
那如何宣告引用呢?舉個例子:
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 中的基本語法成份,它...