引用和指標
c語言中函式有兩種傳參的方式:傳值和傳址。
以傳值方式,在函式呼叫過程中會生成乙份臨時變數用形參代替,最終把實參的值傳遞給新分
配的臨時變數即形參。它的優點是避免了函式呼叫的***,確無法改變形參的值。
如果要改變實參的值,只能通過指標傳遞。
void swap (int
left, int
right)
void swap (int *_pleft , int * _pright)
指標可以解決問題,但不是很形象友好,不安全,因此c++中引入了一種新的符合型別–引
用。 1、引用概念
引用不是新定義乙個變數,而是給已存在變數取了乙個別名,編譯器不會為引用變數開闢記憶體空
間,它和它引用的變數共用同一塊記憶體空間。
【引用宣告】
void testref()
【引用特性】
1. 引用在定義時必須初始化。
2. 乙個變數可以有多個引用。
3. 引用一旦繫結了乙個實體,就不能再改變為其他變數的引用。
void testref()
【常引用】
void testconstref()
陣列可以引用嗎?
2、使用場景
【函式形參】
void swap(int &_ileft, int &_iright)
【返回值】
// 值返回
int add(int _ileft, int _iright)
// 引用 返回
int& add(int & _ileft, int& _iright)
//注意:不要返回棧記憶體的引用
struct strtest
;void funtest0(const strtest& test)
{}void funtest1()
int iend = gettickcount();
cout
//【相同點】
//底層的實現方式相同,都是按照指標的方式來實現的
//【不同點】
void testrefandpoint()
總結
1、引用在定義時必須初始化,指標沒有要求。
2、一旦乙個引用被初始化為指向乙個物件,就不能再指向
其他物件,而指標可以在任何時候指向任何乙個同型別物件
3、沒有null引用,但有null指標。
4、在sizeof中含義不同:引用結果為引用型別的大小,
但指標始終是位址空間所佔位元組個數。
5、引用自加改變變數的內容,指標自加改變了指標指向
6、有多級指標,但是沒有多級引用
7、引用比指標使用起來相對更安全
下面的程式有問題嗎?
void swap(int &left, int &right)
int main()
指標和引用,const 指標和const 引用
指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...
指標和引用
一 先看一段 include using namespace std void freeptr1 int p1 void freeptr2 int p2 void main 思考 在 freeptr1 和freeptr2 的比較中,你能發現它們的不同點嗎?二 對 進行解釋 include using...
指標和引用
指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要認識到在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但...