在默認情況下,變量只能以值傳遞的方式傳遞給函數。這句話的意思是:被傳遞到函數的只是變量的值,永遠不是變量的本身。
例如:
void changeVar(int myVar,int newValue)
{
myVar=newValue;
}
int main()
{
int myNum=20;
changeVar(myNum,90);
std::cout<<myNum<<endl;
return 0;
}
結果:20
在本例中main函數調用函數changeVar(int myVar,int newValue),程序只把main函數中的myNum的值20傳遞給changeVar中的形參myVar,因此他們是不同的兩個變量,就連程序在調用changeVar函數的時候根本就不知道還有myNum這個變量,因此結果輸出myNum還是20。
解決方法:使用地址和指針
上面的示例可以改成
void changeVar(int* myVar,int newValue)
{
*myVar=newValue;
}
int main()
{
int myNum=20;
changeVar(&myNum,90);
std::cout<<myNum<<endl;
return 0;
}
解決方法:引用
上面的示例可以改成
void changeVar(int &myVar,int newValue)
{
myVar=newValue;
}
int main()
{
int myNum=20;
changeVar(myNum,90);
std::cout<<myNum<<endl;
return 0;
}
1.在定義函數時,還可以讓它以“引用傳遞”方式而不是以“值傳遞”方式返回: int &myFuntion();
2.除了可以改變有關變量的值,“引用傳遞”方式的另一個好處是它的開銷相對要小一些:因為不需要在函數里創建臨時變量來容納那些值,程序的內存占用量當然會小一些。
3.如果想獲得“引用傳遞”方式帶來的性能改善,但不想改變某個變量的值,可以把相應的輸入參數定義為一個常量:
void myFunc(const int &myNum);