函式根據資料傳遞方向可分為:
1、輸入型引數:是指這個引數的值已知,由外面傳給函式裡使用。
2、輸出型引數:是指這個引數的值未知,要通過函式傳出來。
設計乙個交換兩個整數的演算法,編寫相應的函式swap(x,y)如下:
#include
void
swap
(int x,
int y)
intmain()
在該函式中的確實現了兩個形參x和y的值的交換,但呼叫該演算法swap(a, b)時發現實參a,b的值並不會發生交換。出現錯誤的原因是這裡的形參x,y既是輸入型引數也是輸出型引數,而swap(x, y)中僅僅將x,y作為輸入型引數設計。
改正方法1:採用指標的方式來回傳形參的值,將swap(x, y)函式改為如下:
void
swap
(int
* x,
int* y)
這樣呼叫該函式的方式改為swap(&a, &b),其中&a,&b分別是實參a,b的位址,顯然改正後的演算法swap()比較複雜,可讀性差
改正方法2:採用引用形參,也就是將輸出型引數設計為引用型別形參。
這種方式是由c++語言提供的,c++中提供了引用運算子「&」。當建立引用時,程式用另乙個已定義的變數(目標變數)的名字初始化它,從那時起,引用變數作為目標變數的別名使用,對引用變數的改動實際是對目標變數的改動。
引用常用於函式形參中,當採用引用型形參時,在函式呼叫時會將形參的改變回傳給實參。利用引用運算子將swap()改為如下:
void
swap
(int
& x,
int& y)
當執行函式swap(a, b)時,形,實參的匹配相當於:
int & x = a; //x為a的引用
int & y = b; //y為b的引用
這樣,a與x共享同一儲存空間,b與y共享同一儲存空間(同一位址),因此執行函式後x和y的值交換等於a和b的值交換。 引用運算子 (C )
在c 中提供了一種引用運算子 將某一變數定義為另乙個變數的引用變數,改變其中的乙個變數兩者均會同步變化。什麼是應用變數?引用變數 於 數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變數可以通過變數名訪問。在指令式語言中,引用變數通常是可變的 但在純函式式語言中,變數可能是不可變的。定義乙個引...
C 運算子過載 輸入 輸出運算子
為了與io標準庫一致,過載輸入輸出運算子函式的第乙個行參應該是流的引用,第二個行參是物件的引用。如果過載為類的成員函式,第乙個行參應該是物件的引用,第二個行參是流的引用。使用方式是 classobj cout 這樣與標準io庫就不一致了,所以輸入輸出運算子不能過載為類的成員函式,可以過載為類的友元函...
C 運算子過載 輸入 輸出運算子
為了與io標準庫一致,過載輸入輸出運算子函式的第乙個行參應該是流的引用,第二個行參是物件的引用。如果過載為類的成員函式,第乙個行參應該是物件的引用,第二個行參是流的引用。使用方式是 classobj cout 這樣與標準io庫就不一致了,所以輸入輸出運算子不能過載為類的成員函式,可以過載為類的友元函...