1. 程式人生 > >C++函式引數和返回值

C++函式引數和返回值

形式引數和實際引數

在呼叫函式時,大多數情況下,函式是帶引數的。主調函式和被呼叫函式之間有資料傳遞關係。前面已提到:在定義函式時函式名後面括號中的變數名稱為形式引數(formal parameter,簡稱形參),在主調函式中呼叫一個函式時,函式名後面括號中的引數(可以是一個表示式)稱為實際引數(actual parameter,簡稱實參)。

【例4.2】呼叫函式時的資料傳遞。

複製純文字新視窗
  1. #include <iostream>
  2. using namespace std;
  3. int max(int x,int y) //定義有參函式max
  4. {
  5. int z;
  6. z=x>y?x:y;
  7. return(z);
  8. }
  9. int main( )
  10. {
  11. int a,b,c;
  12. cout<<“please enter two integer numbers:”;
  13. cin>>a>>b;
  14. c=max(a,b);//呼叫max函式,給定實參為a,b。函式值賦給c
  15. cout<<“max=”<<c<<endl;
  16. return 0;
  17. }
#include <iostream>
using namespace std;
int max(int x,int y)  //定義有參函式max
{
   int z;
   z=x>y?x:y;
   return(z);
}

int main( )
{
   int a,b,c;
   cout<<"please enter two integer numbers:";
   cin>>a>>b;
   c=max(a,b);//呼叫max函式,給定實參為a,b。函式值賦給c
   cout<<"max="<<c<<endl;
   return 0;
}

執行情況如下:
please enter two integer numbers:2 3↙
max=3

有關形參與實參的說明:
1) 在定義函式時指定的形參,在未出現函式呼叫時,它們並不佔記憶體中的儲存單元,因此稱它們是形式引數或虛擬引數,表示它們並不是實際存在的資料,只有在發生函式呼叫時,函式max中的形參才被分配記憶體單元,以便接收從實參傳來的資料。在呼叫結束後,形參所佔的記憶體單元也被釋放。

2) 實參可以是常量、變數或表示式,如max(3, a+b);但要求a和b有確定的值。以便在呼叫函式時將實參的值賦給形參。

3) 在定義函式時,必須在函式首部指定形參的型別(見例4.2程式第3行)。

4) 實參與形參的型別應相同或賦值相容。例4.2中實參和形參都是整型,這是合法的、正確的。如果實參為整型而形參為實型,或者相反,則按不同型別數值的賦值規則進行轉換。例如實參a的值為3.5,而形參x為整型,則將3.5轉換成整數3,然後送到形參b。字元型與整型可以互相通用。

5) 實參變數對形參變數的資料傳遞是“值傳遞”,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。在呼叫函式時,編譯系統臨時給形參分配儲存單元。

請注意:實參單元與形參單元是不同的單元。圖4.3表示將實參a和b的值2和3傳遞給對應的形參x和y。

呼叫結束後,形參單元被釋放,實參單元仍保留並維持原值。因此,在執行一個被呼叫函式時,形參的值如果發生改變,並不會改變主調函式中實參的值。例如,若在執行max函式過程中形參x和y的值變為10和15,呼叫結束後,實參a和b仍為2和3,見圖4.4。

函式的返回值

1) 函式的返回值是通過函式中的return語句獲得的。return語句將被呼叫函式中的一個確定值帶回主調函式中去。

return語句後面的括號可以要,也可以不要。return後面的值可以是一個表示式。

2) 函式值的型別。既然函式有返回值,這個值當然應屬於某一個確定的型別,應當在定義函式時指定函式值的型別。

3) 如果函式值的型別和return語句中表達式的值不一致,則以函式型別為準,即函式型別決定返回值的型別。對數值型資料,可以自動進行型別轉換。