1.c++ * a和*&a作為函式的引數時有什麼區別?
如果你說的是函式的形參,那麼
void foo(int* ptr);
是傳值呼叫,比如你這麼呼叫
int a;
int* pvalue = &a;
foo(pvalue);
這樣的情況下,pvalue的值是不能被函式foo改變的,也就是pvalue肯定是指向a的。
但是如果你這麼宣告
void foo(int*& ptr);
則是傳遞引用,那麼如果你函式裡面
void foo(int*& ptr)
這樣呼叫過之後,pvalue就變成了null。而第一種情況pvalue是不能被改變的。
引用是c++帶來的很重要乙個特性,他在很多情況下避免了使用指標。而且,在c++裡面,引用是不可以捏造的,比如c你可以很容易弄乙個null的指標,而引用這不存在null引用。
上面的foo函式如果要用c來實現,則必須用指標的指標:
void foo(int** pptr)
呼叫的時候要foo(&pvalue)
這種技術很多用在比如定義乙個安全刪除指標的函式,所謂安全就是,只有當指標為零的時候才執行刪除,刪除之後,立刻把指標賦值為null。
template
inline safe_delete(t*& ptr)
}在c++裡面,能不用指標都應該盡量避免,stl裡面就大量使用引用。
2.*&a的含義是什麼?
先進行&a運算,得a位址,再進行*運算。
&a取得了變數a的位址,
*在這裡到底表示什麼?是對應位址的變數,還是對應位址的變數的值?
話說&a這個東西,是乙個表示位址值。是不是需要乙個指標變數來裝?
a = 10;
&a = 1234567;
*1234567 = 10;
&通過變數取位址
*通過位址取值
&a先得到位址,然後*位址得到該位址處變數的值,即a
*&可以抵消,&*也可以抵消
但要注意&*結果為一右值
指標與引用
摘自 高質量c 程式設計 指標與引用,在more effective c 的條款一有詳細講述,我給你轉過來 條款一 指標與引用的區別 指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用...
引用與指標
引用就是物件的另乙個名字,在實際的程式中,引用主要用作函式的形式引數。引用是一種復合型別,通過在變數名前新增 符號來定義。復合型別是指用其他型別定義的型別。在引用的情況下,每一種引用型別都 關聯到 某一其他型別。引用必須用與該引用同型別的物件初始化。當引用初始化後,只要該引用存在,它就保持繫結到初始...
指標與引用
include iostream using namespace std void testref int i 10 引用不可以為空,他是乙個物件的別名 int ref i ref cout i 00824f1e mov dword ptr i 1 把i的位址傳入eax 並把eax指標的位址傳給re...