指標和引用作為函式傳遞引數
阿新 • • 發佈:2019-01-23
引用傳遞
- void OutputNumber(int &nNumber) //設定引用型別引數
- {
- cout << nNumber << endl; //輸出結果
- nNumber = 20; //修改引數值,將影響到實際引數
- }
- int main(int argc, char* argv[])
- {
- int nNum = 10; //定義一個變數
-
OutputNumber(nNum);
- cout << nNum << endl; //輸出變數值
- return 0;
- }
指標傳遞
- void OutputNumber(int *pNumber) //使用指標作為函式引數
- {
- cout << *pNumber << endl; //輸出引數值
- *pNumber = 20; //設定引數值
- }
- int main(int argc, char* argv[])
- {
-
int nNum = 10; //定義一個整型變數
- OutputNumber(&nNum); //呼叫OutputNumber函式
- cout << nNum << endl; //輸出nNum
- return 0;
- }
輸出結果是一樣的:10 20
在編寫函式時,如果函式需要採用引用方式傳遞,使用指標和引用作為引數型別都是可以的。使用指標和引用型別作為函式引數各有優缺點,視具體環境而定。對於引用型別,引用必須被初始化為一個物件,並且不能使它再指向其他物件,因為對引用賦值實際上是對目標物件賦值。這是引用型別的缺點,但也是引用型別的優點,因為在函式呼叫時需要驗證引用引數的合法性。例如,如果函式OutputNumber採用引用引數型別,則語句"OutputNumber(0);"是非法的。如果函式OutputNumber採用指標型別引數,則語句"OutputNumber(0);"是合法的。因為0被認為是一個空指標,對空指標操作必然會導致地址訪問錯誤。因此對於指標物件作為函式引數,函式體中需要驗證指標引數是否為空。這 是使用指標型別作為函式引數的缺點。但是,使用指標物件作為函式引數,使用者可以隨意修改指標引數指向的物件,這是引用型別引數所不能的。另外的區別就是上面的呼叫時用法的區別了了。引用時只需要傳遞值就行,但是指標的話需要傳遞地址。