C++之函數

函數允許在代碼段中構造程序以執行單個任務。

在C ++中,函數是一組給定名稱的語句,可以從程序的某個點調用。定義函數的最常用的語法是:

type name ( parameter1, parameter2, ...) { statements }

其中:

-type是函數的返回值類型

-name是可以調用函數的標識符(可以理解爲名稱)

-paramenter(儘可能多的)是參數,都是由一個type和其後面的標識符組成,每個參數用逗號隔開,每個都很像是常規變量聲明(例如 :int x)並且實際上在函數內作爲函數本地的常規變量。 參數的目的是允許從調用它的位置向函數傳遞參數。

statements是函數的主體,它是用大括號{}包圍的語句塊,用於制定特殊的操作。

讓我們看一個例子:

// function example
#include <iostream>
using namespace std;

int addition (int a, int b)
{
  int r;
  r=a+b;
  return r;
}

int main ()
{
  int z;
  z = addition (5,3);
  cout << "The result is " << z;
}

結果是:

The result is 8

這個程序分爲兩個部分:addition和main。 請記住,無論它們的定義順序如何,C ++程序總是通過調用main來啓動。 實際上,main是唯一自動調用的函數,只有在從main(直接或間接)調用其函數時才執行任何其他函數中的代碼。

在上面的例子中,main從聲明int類型的變量z開始,然後在它之後執行第一個函數調用:它調用addition。 對函數的調用遵循與其聲明非常相似的結構。 在上面的示例中,可以將對add的調用與之前幾行的定義進行比較:

函數聲明中的參數與函數調用中傳遞的參數明確對應。調用傳遞兩個值53給函數; 5和3對應addition聲明中的a和b。

在從main內部調用函數的時刻,控件被傳遞給函數additon:這裏,main的執行被停止,並且只有在addition函數結束後纔會恢復執行。 在函數調用時,兩個參數(5和3)的值被複制到函數內的局部變量int a和int b中。

然後,在addition函數內部聲明瞭一個局部變量(int r),並且通過表達式r=a+b;將a和b的相加的和賦值給r。在a等於5,b等於3的情況下r的值就是8。

在這個函數中的最終語句:

return r;

addition函數結束,將控件返回到調用函數的位置; 在這種情況下:main函數。 在這個精確的時刻,程序恢復其main返回的過程,正好在被添加調用中斷的同一點上。 但另外,因爲addition具有返回類型,所以調用被評估爲具有值,並且該值是在結束添加的return語句中指定的值:在上面這種特定情況下,局部變量r的值,在 return語句的時刻值爲8。

因此,對addition的調用是一個帶有函數返回值的表達式,在這種情況下,該值8被賦給z。 好像整個函數調用(addition(5,3))被它返回的值(即8)所取代。

最後main函數簡單的通過調用下面的語句來輸出值:

cout << "The result is " << z;

函數實際上可以在程序中多次調用,其參數自然不僅限於文本:

// function example
#include <iostream>
using namespace std;

int subtraction (int a, int b)
{
  int r;
  r=a-b;
  return r;
}

int main ()
{
  int x=5, y=3, z;
  z = subtraction (7,2);
  cout << "The first result is " << z << '\n';
  cout << "The second result is " << subtraction (7,2) << '\n';
  cout << "The third result is " << subtraction (x,y) << '\n';
  z= 4 + subtraction (x,y);
  cout << "The fourth result is " << z << '\n';
}

結果是:

The first result is 5
The second result is 5
The third result is 2
The fourth result is 6

與前一個示例中的加法函數類似,此示例定義了一個減法函數,它只返回其兩個參數之間的差異。 這次,main多次調用此函數,演示了調用函數的更多可能方法。

讓我們檢查每個調用,記住每個函數調用本身就是一個表達式,它的值爲它返回的值。 同樣,您可以將其視爲函數調用本身被返回值替換:

z = subtraction (7,2);
cout << "The first result is " << z;

如果用函數返回的值(也就是5)來代替函數本身,我們應該能看到:

z = 5;
cout << "The first result is " << z;

用同樣的方式我們可以解釋:

cout << "The second result is " << subtraction (7,2);

爲:

cout << "The second result is " << 5;

因爲5是subtraction(7,2)的返回值;

在例子:

cout << "The third result is " << subtraction (x,y)

中傳遞的是變量而不是數字,這也是有效的並且工作正常。使用值調用該函數,x並且y在調用時具有:5和3,結果返回2。

第四次調用再次被解釋爲:

z = 4 + subtraction (x,y);

唯一的補充是現在函數調用也是加法運算的操作數。同樣,結果與函數調用被其結果替換的結果相同:6。注意,由於添加的可交換屬性,上面的內容也可以寫成:
 

z = subtraction (x,y) + 4;

結果完全相同,另請注意,分號不一定在函數調用之後,而是一如既往地在整個語句的末尾。同樣,通過用返回值替換函數調用,可以很容易地看到背後的邏輯:

z = 4 + 2;    // same as z = 4 + subtraction (x,y);
z = 2 + 4;    // same as z = subtraction (x,y) + 4;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章