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

2022-07-09 12:06:11 字數 1683 閱讀 8029

指標 是位址(即記憶體單元的編號)

指標變數 是乙個存放位址的變數

指標引用 指的是這個指標變數的引用

眾所周知c++中如果引數不是引用的話會呼叫引數物件的 拷貝建構函式(重新開闢一塊一模一樣的記憶體空間),所以如想改變指標變數裡面存的位址,就要使用指標引用

讀**前請先搞懂:

二級指標(指標的指標):指向指標的指標變數

通過**來理解

#include using namespace std;

typedef struct

node;

void change_n1(node * pn1)//指標接收,相當於接收了指標變數的乙份拷貝

void change_n2(node * &pn2)//指標引用接收,pn2就是n2的別名,指向的是同一塊記憶體單元

void change_n3(node * * pn3)//指標的指標接收,(*pn3)等價於n3, 指向的是同一塊記憶體單元

void test01()

void test02()

void test03()

int main()

輸出結果:

圖示

注意:

指標引用是指標變數的別名,在函式內部可以修改指標變數指向的位址,比如以前指向的是0x0100,現在可以在函式內部把他改成指向0x1000

使用指標接收,傳指標傳入的只是乙份拷貝,在函式內部修改指標指向的位址,並不會修改原實參所指向的位址。

若想改變指標變數指向的位址,傳入指標變數, 函式形參應該使用 指標引用 接收若想改變指標變數指向的位址,傳入指標變數位址, 函式形參應該使用 指標的指標 接收

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

而在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參變數的位址(int &a的形式)。被調函式對形參的任何操作都被處理成間接定址,即通過棧中存放的位址訪問主調函式中的實參變數。正因為如此,被調函式對形參做的任何操作都影響了主調函式中的實參量。

引用傳遞和指標傳遞是不同的,雖然它們都是在被調函式棧空間上的乙個區域性變數,但是任何對於引用引數的處理都會通過乙個間接定址的方式操作到主調函式中的相關變數。而對於指標傳遞的引數,如果改變被調函式中的指標位址,它將影響不到主調函式的相關變數。如果想通過指標引數傳遞來改變主調函式中的相關變數,那就得使用指向指標的指標,或者指標引用。

C 中 (指標引用)和 (指標)的區別

很久之前學的c 了,複習一下,指標是乙個存放位址的變數,而指標引用指的是這個變數的引用,眾所周知c 中如果引數不是引用的話會呼叫引數物件的拷貝建構函式,所以如果有需求想改變指標所指的物件 換句話說,就是要改變指標裡面存的位址 就要使用指標引用,在網上看到大佬的 簡單明瞭,如下 include usi...

C 中指標和引用的區別

引用和指標 相同點 1.都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 引用是某塊記憶體的別名。區別 1.指標是乙個實體,而引用僅是個別名 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次,之後不可變 指標可變 引用 從一而終 4.引用沒有 const,指標...

C 中指標和引用的區別

好多初學c c 的人對引用和指標這兩個概念很模糊,下面列出它們的一些區別。相同點 1.都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 引用是某塊記憶體的別名。區別 1.指標是乙個實體,而引用僅是個別名 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次,之後不...