指標的指標和指標的引用

2021-07-26 21:04:20 字數 1516 閱讀 2817

1,使用指標的指標和指標的引用的原因

當我們把乙個指標做為引數傳乙個方法時,其實是把指標的複本傳遞給了方法,也可以說傳遞指標是指標的值傳遞。如果我們在方法內部修改指標會出現問題,在方法裡做修改只是修改的指標的copy而不是指標本身,原來的指標還保留著原來的值。我們用下邊的**說明一下問題:

int m_value = 1;

void func(int

*p)int main(int argc, char *argv)

看一下輸出結果

輸出的是兩個2。

結論:

1. 函式的返回值是指標型別的,檢查是靜態記憶體指標還是堆記憶體指標還是棧記憶體指標,棧記憶體指標是絕對要不得滴!

2.函式需要使用指標引數進行傳入傳出的,在函式中只能對指標的指向的值(*p)進行修改,而不能修改指標指向,也就是指標位址!(函式中不得修改指標引數的位址,否則請使用指標的指標!)

展示一下使用指標的指標做為引數:

int m_value = 1;

void func(int

**p)

int main(int argc, char *argv)

輸出2 和5

我們看一下 func(int **p)這個方法

p: 是乙個指標的指標,在這裡我們不會去對它做修改,否則會丟失這個指標指向的指標位址

*p: 是被指向的指標,是乙個位址。如果我們修改它,修改的是被指向的指標的內容。換句話說,我們修改的是main()方法裡 *pn指標

**p: 兩次解引用是指向main()方法裡*pn的內容

nt m_value = 1;

void func(int *&p)

int main(int argc, char *argv)

輸出還是2和5

看一下func(int *&p)方法

p: 是指標的引用,main()方法裡的 *pn

*p:是main()方法裡的pn指向的內容。

/這部分是關於指標的引用&的說明*、

指標的引用,相當於傳遞的是: 指標的指標, 這樣指標的數值是可以改變的

而單傳遞指標,不傳遞指標的引用,那麼指標指向的資料是可以改變,而指標本身是不可以改變的

fun(int * pa); // pa的數值在函式返回後不會變化

fun(int*& pa); // pa的數值在函式返回可能會發生變化,如果fun函式內部對pa賦值的話

void initstack(lnode* & hs)

void initstack(lnode* hs) */

by northow:

簡單講,*&指標本身可變;

*指標本身不變,僅指向的內容可變。

參考:

指標,和指標的引用

先貼出 void testreference fun1 person p void testreference fun2 person p void testreference fun3 person p 函式fun1傳入乙個指標,在函式內對p進行賦值,fun2傳入乙個指標,修改iage,函式fun...

c 指標的指標和指標的引用

當我們把乙個指標做為引數傳乙個方法時,其實是把指標的複本傳遞給了方法,也可以說傳遞指標是指標的值傳遞。如果我們在方法內部修改指標會出現問題,在方法裡做修改只是修改的指標的copy而不是指標本身,原來的指標還保留著原來 的值。我們用下邊的 說明一下問題 輸出的是兩個2 展示一下使用指標的指標做為引數 ...

C 指標的指標和指標的引用

我們會遇到一種函式 例如 void fun int p 或者 void fun int p 這兩種函式是什麼意思呢?首先先看 void fun int p 這裡的p是乙個形參,函式內內部修改該引數不會導致外部實參的改變。void fun int p int main int main int a 1...