今天資料結構課程hb問為什麼指標傳值要加引用才能修改原值。
c沒學好的我攜著曉豪大佬,凱哥大佬共同**了指標問題。
首先我們回顧一下c語言中的指標操作
#include
using namespace std;
intfuction
(int
*q)int
main()
輸出結果:
3 9 9
3
指標傳值應該是可以修改原值才對,第乙個a的輸出結果應該為3,可是為什麼為9?我們四個面面相覷,以為是編譯器的問題,後來多加了一條語句在後面單獨輸出a的值,看出來原來是因為**的執行順序從右到左,因此第一行輸出9
函式傳入的形參是指標型別,對指標進行解引用操作後才可以改變變數位址內儲存的值
接下來我們看一下最近資料結構中煉表,棧等實現過程中的指標傳參。
void
crtbt
(bitree *
&t,char pre,
char ino,
int ps,
int is,
int n)
// ps 先序遍歷的起始位置
// is 中序序列的起始位置
// n 為節點個數
// pre 先序遍歷的陣列
}}
不好意思,隨便找了乙個樹的, 看出來變數型別是我們原來沒有見過的奇奇怪怪的 " *& ",傳入指標變數的引用?
對比c中**我們可以發現 function 函式中對指標進行了解引用操作,而二叉樹中並沒有。解釋了我們傳指標進函式就可以直接對指向位址變數進行修改操作的誤區。
而二叉樹中的傳參如果不加引用同樣是傳入形參,不會對原指標造成影響,因此寫操作要加引用符號~
指標傳參問題C
改變變數用一級指標,改變指標用二級指標 1 改變值 void fun int p void fun2 int p 改變變數用一級指標,改變指標用二級指標,main 2 改變指標 void getmem1 char s 想在函式中分配記憶體,再返回,徒勞無功 問題2 char getmemory vo...
C語言指標傳參問題
void pointer int p intmain the p is0xbfd46498 addr is 1076599652,p is 22the p is0xbfd46498 addr is 1076599680,p is 22the p is0xbfd46498 addr is 107659...
引用傳參和指標傳參的差別
在c 中,如果函式的實參的型別是資料型別比較大的資料型別,這是如果使用一般傳參就會有很大的不方便,這是如果能夠傳遞乙個位址或者是對原來引數的乙個引用對提高效能會有很大的幫助。本文研究一下引用傳參和指標傳參的區別和聯絡。其實引用傳參和指標傳參都能夠在條用函式內部對源資料進行修改,這是它們的共同點,但是...