通常使用的「按指傳遞」,函式內的操作的實際上是輸入引數的乙個副本(即函式建立了乙個臨時變數,其值與輸入引數完全相同),對該副本的操作不會影響輸入引數的值。而「按引用傳遞」,可以理解為副本是乙個引用變數,該副本與輸入引數共享儲存區。因此函式內對副本的修改相當於對輸入引數進行修改。
當輸入引數是抽象資料型別時,採用「按引用傳遞」可以避免建立副本時建構函式的呼叫(以及函式返回時析構函式的呼叫)。因此按引用傳遞會比按值傳遞更有效率。
注意:「按引用返回」,對於返回值有一定的限制:即返回值不能是區域性變數,必須能生存在函式作用域之外。譬如:
例子:
int & f(int& a)
會出錯,因為b是區域性變數,引用返回值必須可以再在呼叫函式外生存。
下面是個完整的案例說明引數按值傳遞和按引用傳遞的區別:
#include
#ifndef strngbad_h
#define strngbad_h
class stringbad
;#endif
#include
#include "parameter.h"
using namespace std;
int stringbad::num_string=0;
//class methods
stringbad::stringbad(const char *s)
stringbad::stringbad()
stringbad::~stringbad() std::ostream & operator <<(std::ostream &os ,const stringbad &st) { os<
c 引數傳遞之引用引數
每乙個想要做到模組化程式設計的碼農都不可避免的乙個問題是引數傳遞 如果您在這裡覺得有疑問,誒,我不想做模組化呢,以筆者經驗這個你大可不必揪心,因為你的老師或者老闆會讓你做到的 以c語言為例,主調函式傳參給被調函式的情況中,87 的情況都是要改變引數的值。這時候有兩種方法做到這個,第一傳指標,一般情況...
C 學習筆記之引數傳遞
如果形參具有非引用型別,則複製實參的值 如果形參為引用型別,則它只是實參的別名。1.非引用形參 指標形參 指標形參是指向const型別還是指向非const型別,將影響函式呼叫所使用的實參。1 void use ptr const int p 25 void rest int p 6 可以使用int ...
c 引數傳遞
引數型別分為int,ref,out三種,預設為int.int型別在字方法中修改了對應變數後,主方法中的值不會發生變化.ref型別在方法中修改了對應變化後,主方法中的值也會發生變化.out主方法中對應的變數不需要初始化.例子 using system using system.collections....