C和C ++支持與大多數其他編程語言不同的指標,其他語言包括C ++,Java,Python,Ruby,Perl和PHP,
從表面上看,參考和指標非常相似,都用于使一個變數提供對另一變數的訪問,兩者都提供了許多相同的功能,因此通常不清楚這些不同機制之間的區別,在本文中,我將嘗試說明指標和參考之間的區別,

?
指標:指標是一個變數,用于保存另一個變數的記憶體地址,需要使用*運算子將指標取消參考,以訪問其指向的記憶體位置,
參考:參考變數是別名,即已經存在的變數的另一個名稱,參考(如指標)也通過存盤物件的地址來實作,
可以將參考視為具有自動間接指向的常量指標(不要與指向常量值的指標混淆!),即編譯器將應用*運算子,
差異:
1.初始化:
指標可以通過以下方式初始化:
int a = 10;int * p =&a;
或者int * p;p =&a;我們可以在同一步驟或多行中宣告和初始化指標,
在參考中, int a = 10;int&p = a; //它是正確的 但int&p; p = a; //這是不正確的,因為我們應該一步一步宣告和初始化參考,
注意:編譯器之間的差異可能有所不同,以上差異是針對Turbo IDE的,

?
2.重新分配:可以重新分配指標,此屬性對于實作資料結構(例如鏈表,樹等)很有用,
請參見以下示例:
int a = 5;int b = 6;int * p;p =&a;p =&b;
另一方面,參考不能重新分配,必須在初始化時分配,
整數a = 5;int b = 6;int&p = a;int&p = b; //在這一行它將顯示錯誤,因為“不允許多個宣告”,但是,這是有效的宣告,int&q = p;
3.記憶體地址:指標在堆疊上有其自己的記憶體地址和大小,而參考共享相同的記憶體地址(與原始變數),但也占用了堆疊上的一些空間,
int&p = a; cout <<&p << endl <<&a;
4.NULL值:指標可以直接分配為NULL,而參考則不能,與參考關聯的約束(無NULL,無重新分配)確保基礎操作不會遇到例外情況,
5.間接:您可以使用指向提供額外級別間接的指標,而參考僅提供一種間接級別,即,
在指標中整數a = 10;int * p;int ** q; //它是有效的,p =&a;q =&p;而在參考文獻中,int&p = a;整數&& q = p; //它是對參考的參考,因此是錯誤,
6.算術運算:可以對指標執行各種算術運算,而沒有所謂的參考算術,(但是您可以像參考&obj + 5那樣獲取參考指向的物件的地址并對其進行指標算術), )

?
何時使用什么
性能完全相同,因為參考在內部作為指標實作,但是,您仍然可以記住一些要點,以決定何時使用什么:
使用參考 :在函式引數和回傳型別中,
使用指標: 如果需要使用指標算識訓傳遞NULL指標,請使用指標,例如對于陣列(請注意,陣列訪問是使用指標算術實作的),
由于要指向不同的單元格,因此要實作諸如鏈表,樹等的資料結構及其演算法,我們必須使用指標的概念,
C ++ FAQ Lite中參考:可以使用參考,而必須使用指標,每當您不需要“重新放置”時,通常首選使用參考而不是使用指標,這通常意味著參考在類的公共介面中最有用,參考通常顯示在物件的外觀上,而指標則顯示在物件的外觀上,
上面的例外是函式的引數或回傳值需要“reseating”參考,即不參考物件的參考,通常最好通過回傳/獲取一個指標,并賦予NULL指標特殊的意義來完成此操作(參考必須始終是別名物件,而不是取消參考的空指標),
每天學點小知識,希望對你有幫助~
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
C語言C++編程學習交流圈子【點擊進入】微信公眾號:C語言編程學習基地
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/271845.html
標籤:其他
上一篇:markdown快捷輸入
下一篇:爬取本blog所有文章鏈接
