指標與引用

2021-09-02 23:08:49 字數 1025 閱讀 2245

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...