2009年4月15日 星期三

C++ 參數傳遞小筆記

今晚你選哪道?



void f(int);\\call by value
void f(int*);\\call by address
void f(int&);\\call by reference

main(){
f(123); \\1
f(NULL); \\2
f(0); \\3
}

上面程式碼
call by value 三個都可以通過
call by address 2,3通過
call by reference 接不通過
為什麼呢?
原來是call by address和call by reference當參數傳遞時只能接受"變數"
也就是一個lvalue(memory location),他們必須參考到某一個記憶體位置
而指標比較特殊,他可以接受NULL,也就是0的直當初始化
而call by reference因為一定要初始化的特性,只要是純量他都不接受

void f(int& p){}

main(){
int i=0;
f(i);
}

上面動作就像是

int& p=i;

如果傳純量的話

void f(int& p){}

main(){
f(123);
}

則變成

int& p=100;

根據Reference Type的特性 他當然會編譯不過

切記!切記!

沒有留言: