指標和引用的區別

2021-12-29 21:51:56 字數 1566 閱讀 9021

指標和引用的區別:在c++的學習中,我們經常被應該如何使用指標和引用這個問題所困擾,那麼我這裡給大家說一下在我的學習過程中對指標和引用的理解,和它們之間的區別,希望各位朋友給出不同的意見並且指出我在學習中的一些錯誤。

首先我們來聊一下指標,相信我們在c的學習中就會遇到這個在c程式設計中無處不在的朋友。

指標本來就是用來存放位址的乙個變數,其中他存放的位址和存放位址中的資料都可以被更改除非你這樣(const int * const p = 12) 首先我們定義指標時通常是:

int * p = 12;

可以知道p是乙個指標變數,裡邊儲存的是數值12所在記憶體單元的位址,*的含義即是用於執行間接訪問的乙個單目運算子,他可以去訪問p中的位址從而得到12這個值。

指標傳遞是一種值傳遞的方式,他傳遞出去的只是位址值,值傳遞的時候中我們可以知道被調函式的形參會被當做乙個區域性變數來出來,會在棧中去給其分配空間用 來儲存主調函式傳輸過來的值,該值只不過是主調函式中實參值的乙個拷貝,所以在被調函式中去修改傳輸過來的值並不會去影響主調函式中的實參值。

我們可以通過乙個程式來看一下

程式執行的結果:

我們可以看到在該程式中呼叫函式func時傳遞的只是乙個位址值,x = x + 3並不會去更改掉n 的值他只是在進行n的位址的相加

可是如果要更改n 的值值需要把上面**中x = x+3;,更改為(*x)= (*x)+3;就可以了

我們再來看一下引用

我們還是從 程式中來看首先我們先定義乙個變數

我們可以看到b引用a的值而且我們同時列印了b和a的位址

現在我們看看執行的結果

我們可以看到b引用a之後b的值也為4,同時a和b的位址也是相同的所以我們可以說b引用了a是只是給a空間起了乙個外號叫做b

現在我們再來看看如果在程式中運用引用傳遞的效果

上邊應該是#include

現在我們來看看執行的結果

我們可以看到 b與n的值是相等的;

現在我們來總結一下

相同點他們都是和位址有關係的,我們可以看到指標指向一塊記憶體,而引用是一塊記憶體的別名;

不同點1指標是乙個實體他在棧中有自己使用的空間,但是引用沒有;

2引用必須初始化,指標不用但是最好初始化

3指標使用時必須加*,引用不用;

4引用只能初始化一次是個專一的人,指標不是;

5引用不用const去修飾,但是指標可以

6指標和位址運用自增(++)不同,引用是值進行自增,而指標是位址進行自增;

聯絡1引用的內部使用指標實現的(如何實現這裡不做解釋)。

2引用是受了限制的指標。

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

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

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

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

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

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