指標和引用的區別

2021-09-13 11:33:42 字數 1875 閱讀 2559

指標是乙個變數,其值為另乙個變數的位址,即,記憶體位置的直接位址。就像其他變數或常量一樣,您必須在使用指標儲存其他變數位址之前,對其進行宣告。

所有指標的值的實際資料型別,不管是整型、浮點型、字元型,還是其他的資料型別,都是一樣的,都是乙個代表記憶體位址的長的十六進製制數。不同資料型別的指標之間唯一的不同是,指標所指向的變數或常量的資料型別不同。

引用(reference)就是c++對c語言的重要擴充。引用就是某一變數(目標)的乙個別名,對引用的操作與對變數直接操作完全一樣。引用的宣告方法:型別識別符號 &引用名=目標變數名。

(1)&在此不是求位址運算,而是起標識作用。

(2)型別識別符號是指目標變數的型別。

(3)宣告引用時,必須同時對其進行初始化。

(4)引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。

(5)對引用求位址,就是對目標變數求位址。&ra與&a相等。即我們常說引用名是目標變數名的乙個別名。別名一詞好像是說引用不佔據任何記憶體空間。但是編譯器在一般將其實現為const指標,即指向位置不可變的指標。即引用實際上與一般指標同樣占用記憶體。

(6)不能建立引用的陣列。因為陣列是乙個由若干個元素所組成的集合,所以無法建立乙個由引用組成的集合。但是可以建立陣列的引用。

(7)引用是除指標外另乙個可以產生多型效果的手段。這意味著,乙個基類的引用可以指向它的派生類例項。

引用的兩個主要用途:作為函式引數以及從函式中返回左值。

使用指標時會頻繁進行以下幾個操作:定義乙個指標變數、把變數位址賦值給指標、訪問指標變數中可用位址的值。這些是通過使用一元運算子*來返回位於運算元所指定位址的變數的值。但是返回引用要注意,返回的這個變數不能是在這個函式中臨時定義的,因為函式是在棧中執行的,執行完之後,其中的變數都會被銷毀,如果這樣做,引用將代表乙個已經被釋放掉變數,如果操作該引用,將會出現不可預知的後果。

引用是c++新增的語法,引用有代表的意思,而指標是乙個變數的位址值。在函式返回乙個變數時,實質上是將要返回的值複製到臨時位置上,然後才是在外部接收該變數,這樣做效率低,但如果返回引用,就省去了中間那一步,顯然這樣效率更高。

(1)指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元;而引用跟原來的變數實質上是同乙個東西,只不過是原變數的乙個別名而已,在記憶體占有同乙個儲存單元。

(2)指標可以是空值,可以在任何時候被初始化;引用不可以為空,當被建立的時候,必須初始化。

(3)可以有const指標,但是沒有const引用。

(4)指標可以有多級,但是引用只能是一級。

(5)指標的值在初始化後可以改變,即指向其它的儲存單元,而引用在進行初始化後就不會再改變了。

(6)sizeof引用得到的是所指向的變數(物件)的大小,而sizeof指標得到的是指標本身的大小。

(7)指標和引用的自增(++)運算意義不一樣。指標的自增是對它的記憶體的位置自增,假如乙個陣列裡的元素是int整型,如果指標起始指向的時陣列的0號下標元素,則指標自增一次之後就會指向陣列的第二個元素;而引用則時對它的值進行自增,如果0號下標元素的值為25,則引用起始指向0號下標,自增之後,它的值就會變為26。

(8)如果返回動態記憶體分配的物件或者記憶體,必須使用指標,引用可能引起記憶體洩漏。

(1)指標作為引數進行傳遞。在指標作為引數進行傳遞的時候,它會拷貝乙份實參,然後它們指向同一塊儲存記憶體,但是它倆的變數分別儲存在不同的區域。因此修改形參裡面的指標的指向時並不會修改實參裡面的儲存內容,如果想修改的話就得使用引用了。

(2)將引用作為函式的引數進行傳遞。在講引用作為函式引數進行傳遞時,實質上傳遞的是實參本身,即傳遞進來的不是實參的乙個拷貝,因此對形參的修改其實是對實參的修改,所以在用引用進行引數傳遞時,不僅節約時間,而且可以節約空間。所以在引用進行引數傳遞時,事實上傳遞的是實參本身而不是拷貝副本。

指標引用和引用指標的區別

c 在傳參的過程中,指標 和指標引用 是有區別的。雖然,我們往往可以通過傳指標然後通過間址訪問來修改指標所指向物件的值,同樣,通過引用也可以直接修改物件的值。但是,當傳指標的時候有乙個問題,就是,我們雖然可以通過指標來修改指標所指向物件的值,但是我們沒有不能直接修改指標的內容 也就是指標變數存放的位...

傳指標和傳指標引用的區別 指標和引用的區別(本質)

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...

傳指標和傳指標引用的區別 指標和引用的區別(本質)

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...