指標引用的用法

2021-09-07 23:17:15 字數 1097 閱讀 5596

指標引用就是乙個指標的引用,看下面例1:

int a = 10;

int b = 20;

void swap(int& lhs, int& rhs)

swap(a, b);

上面的程式可以成功交換兩個int值,但是如果形參傳的是int而非其引用的話則不會交換2個int值,因為形參非引用的情況下,編譯器會複製a,b然後把a,b的拷貝傳到swap函式中,交換的只是a,b的拷貝而已,所以失敗。但是傳引用則可以成功。

例2:

/* 查詢機車

* @name:   機車名字

* @crg:    被查詢到的機車

* @return: 未找到機車返回false;否則返回true

*/bool find(lpctstr name, carriage* &crg);

bool crg_repository::find(lpctstr name, carriage *&crg)

}return true;

}上面程式根據name查詢機車,其中機車存放在乙個容器中:std::deque<

carriage *

> crgs_

並返回找到的這個機車的指標。

如果find函式的第二個引數不傳指標的引用而傳指標的話,可能如下所示:

carriage* found;

crg_repository crep;

crep.find("123", found);

這樣的呼叫不會改變found這個指標的值,find函式僅僅改變了found的拷貝而已,所以失敗。

當傳指標引用的時候則會成功,因為:傳引用編譯器不會拷貝乙個found傳到find函式中去,而是直接傳遞found,在find函式內部的修改就是found本身,而不是它的拷貝;修改完後,found的值變了,當然可以成功。

當然這個find函式也可以這樣

carriage* find(lpctstr name);

所以傳指標引用的目的是要修改這個指標,呼叫函式之後修改這個指標的值,獲得這個修改後的值以備他用。

總結一下:傳引用的目的一般是為了修改這個傳遞的是引用的引數,然後返回這個值(以後程式中會用到);或者是不讓編譯器對引數進行拷貝,提高效率。

指標引用的用法

指標引用就是乙個指標的引用,看下面例1 int a 10 int b 20 void swap int lhs,int rhs swap a,b 上面的程式可以成功交換兩個int值,但是如果形參傳的是int而非其引用的話則不會交換2個int值,因為形參非引用的情況下,編譯器會複製a,b然後把a,b的...

C 指標和引用的用法

一 基本知識 指標和引用的宣告方式 宣告指標 char pc 宣告引用 char c a char rc c 它們的區別 從現象上看,指標在執行時可以改變其所指向的值,而引用一旦和某個物件繫結後就不再改變。這句話可以理解為 指標可以被重新賦值以指向另乙個不同的物件。但是引用則總是指向在初始化時被指定...

C 常量指標 指標常量 引用和常引用的用法解析

今天學習c 的常量型別和引用,其中常量指標 指標常量 引用和常引用幾個概念較為接近,特地整理一下。1.常量指標 pointer to const 常量指標,顧名思義,是指向常量的指標,其定義的一般形式為 const t pointer name t為資料型別,target為t類資料。常量指標本身是可...