總的來說,在以下情況下你應該使用指標:
一是你考慮到存在不指向任何物件的可能(在這種情況下,你能夠設定指標為空),先貼一下**,這裡只貼了一部分二是你需要能夠在不同的時刻指向不同的物件(在這種情況下,你能改變指標的指向)。
如果總是指向乙個物件並且一旦指向乙個物件後就不會改變指向,那麼你應該使用引用。
———————摘自《more_effective c++》
在二叉樹相關的程式設計中,對leftchild 或者rightchild的指向進行修改是很常見的,今天遇到了乙個小坑
class rbtree
void rbtree::insert(int key,node * root)
}
會有什麼問題呢,在insert後,m_root 仍然為空這是為什麼呢?
rbtree test1;
test1.insert(5, test1.m_root);
舉個例子
int c;
int d;
int *a=&c;
swap (a, b)
a指標指向整型 c
a指標的值是c變數的位址。
你可以通過a指標修改b的值。但是你要想讓a指標指向d,你就得修改a指標的值。
但是指標作為引數傳到函式的時候,是不能修改原來的值的
那麼這個時候,就應該傳的是a指標的引用
所以,上面那段**
應該改成
void insert(int key,node * &root);
這樣才能對root的指向進行修改
總結一下, 對指標指向的東西的修改, 和對指標本身的修改是不同的
如果要對指標的指向進行修改,就要用指向指標本身的指標進行修改 或者 用指標本身的引用 修改
指標和指標的引用作為引數 c
指標和指標的引用作為引數 c 指標都清楚,存放變數位址的變數。那麼指標指向的資料是可以改變,而指標本身是不可以改變的。表示為 p 指標的引用,相當於指標的指標。作為引數傳遞時,這樣指標的數值是可以改變的,表示為 p fun int pa pa的數值在函式返回後不會變化 fun int pa pa的數...
指標和引用作為函式傳遞引數
引用傳遞 void outputnumber int nnumber 設定引用型別引數 intmain intargc,char argv 指標傳遞 void outputnumber int pnumber 使用指標作為函式引數 intmain intargc,char argv 輸出結果是一樣的...
c 中指標的引用 作為引數傳遞
我們都知道c 中的引數傳遞是值傳遞,想要通過函式修改形參,一般使用指標或者引用。那麼有時候我們對於傳入的指標位址希望做修改怎麼辦呢?今天在寫乙個樹結構的題時碰到這個問題 大概 是 void insert array treenode node,int array,int left,int right...