c++引用和指針區(qū)別 引用與指針的區(qū)別?
引用與指針的區(qū)別?引用訪問是對變量的直接訪問,而指針訪問是間接訪問。引用是變量的別名。它不分配自己的內存空間,但指針有自己的內存空間。引用在開頭綁定到一個內存空間(必須在開頭指定初始值),因此它只能是
引用與指針的區(qū)別?
引用訪問是對變量的直接訪問,而指針訪問是間接訪問。
引用是變量的別名。它不分配自己的內存空間,但指針有自己的內存空間。
引用在開頭綁定到一個內存空間(必須在開頭指定初始值),因此它只能是該
內存空間的名稱,不能更改為任何其他名稱。當然,您可以更改此內存空間的值。
例如
int I=3,j=4
int&x=I//成為I的別名
X=j//不能否認X仍然指I,而不是j的別名。它只是更改X和j共享的內存空間的值。
這與指針不同,它可以隨時改變自己的點
引用,一個變量的別名,為什么要引入別名?原因是我們想定義一個變量,它共享另一個變量的內存空間。使用alias無疑是一個不錯的選擇。變量是什么?它是一個內存空間的名稱。如果我們給這個內存空間起另一個名字,那就是我們可以共享這個內存。引用(別名)來自此。指針,指向另一個內存空間的變量。我們可以通過它索引另一個內存空間的內容。它有自己的存儲空間。兩者的區(qū)別:引用訪問,變量是直接訪問,指針是間接訪問。引用是變量的別名。它不分配自己的內存空間,但指針有自己的內存空間。引用在開始時綁定到一個內存空間(初始值必須在開始時賦值),因此它只能是這個內存空間的名稱,不能更改為任何其他名稱。當然,這個內存空間的值是可以改變的。例如,int i=3,j=4,int&x=i//成為i=j//的別名X,不可否認X仍然指向i而不是j的別名,它只是改變X和j共享的內存空間的值,指針不同于指針,它可以隨時改變它的點
簡言之,指針是表示地址的無符號整數(shù)。
所以僅僅理解指針是不夠的。您還需要知道指針指向的數(shù)據(jù)空間是如何排列的。這可能涉及到一些與特定CPU/OS相關的知識。如果我們能用計算機體系結構的知識來理解它,它會更深刻、更準確。
例如:
如何存儲float/double/long double?
如何在數(shù)據(jù)空間中組織陣列?
字符串是如何存儲的?
如何存儲結構和聯(lián)合體?
位域組織
具體CPU相關部分如下:
整數(shù)的存儲將涉及CPU大小的指定
浮點數(shù)的存儲直接關系到FPU的設計
此外,還有一些擴展知識,涉及內存的分配和釋放:如何在程序中分配內存?(malloc/free)
什么是堆和堆棧?
總而言之:指針是地址和整數(shù)。但要充分利用它,我們需要了解計算機存儲空間的分配。困難在這里,突破在這里。