指標引用就是乙個指標的引用,看下面例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類資料。常量指標本身是可...