函數允許在代碼段中構造程序以執行單個任務。
在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的調用與之前幾行的定義進行比較:
函數聲明中的參數與函數調用中傳遞的參數明確對應。調用傳遞兩個值5
和3
給函數; 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;