指標和引用的區別

2021-09-10 14:08:11 字數 1909 閱讀 3100

指標會新構建乙個變數,而引用則不會

e.g.

int* p;

void func(int* p1){};

在指標傳遞中,實參是p,形參是p1這是兩個不同的變數。

1.可以通過修改p1指向的變數,來改變p指向的變數

2.修改位址p1的值,不會改變位址p的值,導致*p1不會改變

3.指標變數的引用傳遞

int a =1;

int b =2;

int* p =

&a;void

func

(int

* p)

intmain()

結果實參p的位址並不會被改變

#include

using namespace std;

class

listnode

listnode

(int x)

:val

(x),

next

(null)};

void

func

(listnode* p)

intmain()

;for

(int i=

0;i<

2;i++

) arr[2]

.val =3;

arr[2]

.next = null;

listnode* p =

&arr[0]

; cout<

>val<

func

(p);

cout<

>val<

}

實參p的位址並不會被改變

#include

using namespace std;

class

listnode

listnode

(int x)

:val

(x),

next

(null)};

void

func

(listnode* p)

intmain()

;for

(int i=

0;i<

2;i++

) arr[2]

.val =3;

arr[2]

.next = null;

listnode* p =

&arr[0]

; cout<

>val<

func

(p);

cout<

>val<

}

這裡實參p的val被改變

那麼如何做到既可以改變val也可以改變其位址變數呢?

int a =1;

int b =2;

int* p =

&a;void

func

(int

*& p)

void

func2

(int

* p)

intmain()

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

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

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

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

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

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