C Plus Plus中的函數

C/C Plus Plus中的函數

函數是一組語句,這些語句接受輸入,進行一些特定的計算併產生輸出。

其思想是將一些常見的或重複執行的任務放在一起並創建一個函數,這樣我們就可以調用該函數,而不是為不同的輸入一次又一次地編寫相同的代碼。

下面是一個簡單的C/C++程序來演示函數。

<code>#include <iostream> 
using namespace std;

int max(int x, int y)
{
if (x > y)
return x;
else
return y;
}

int main() {
int a = 10, b = 20;

// Calling above function to find max of 'a' and 'b'
int m = max(a, b);

cout << "m is " << m;
return 0;
} /<iostream>/<code>

輸出:

<code>m is 20/<code>

我們為什麼需要函數?

  • 函數可以幫助我們減少代碼冗餘。如果功能是在軟件中的多個位置執行的,則不必一次又一次地編寫相同的代碼,而是創建一個函數並在任何地方調用它。這也有助於維護,因為如果將來對功能進行更改,則只須在一處進行更改。
  • 函數使代碼模塊化。考慮一個具有多行代碼的大文件。如果將代碼劃分為函數,那麼閱讀和使用代碼將變得非常簡單。
  • 函數提供抽象。例如,我們可以使用庫函數而不必擔心它們的內部工作。

函數聲明告訴編譯器函數需要使用的參數數量,參數的數據類型和函數的返回類型。在函數聲明中將參數名稱放在函數聲明中是可選的,但有必要將其放入定義中。以下是函數聲明的示例。

C/C Plus Plus中的函數

<code>// A function that takes two integers as parameters 
// and returns an integer
int max(int, int);

// A function that takes a int pointer and an int variable as parameters
// and returns an pointer of type int
int *swap(int*,int);

// A function that takes a charas parameters
// and returns an reference variable
char *call(char b);

// A function that takes a char and an int as parameters
// and returns an integer
int fun(char, int); /<code>

在C語言中,我們可以在同一位置進行聲明和定義,就像在上面的示例程序中一樣。

C還允許分別聲明和定義函數,這在庫函數的情況下尤其需要。庫函數在頭文件中聲明,並在庫文件中定義。

傳遞給函數的參數

傳遞給函數的參數稱為實際參數,函數接收的參數稱為形式參數。

有兩種最流行的傳遞參數的方法。

按值傳遞:在這種參數傳遞方法中,將實際參數的值複製到函數的形式參數中,並將兩種類型的參數存儲在不同的存儲位置中。因此,函數內部所做的任何更改都不會反映在調用者的實際參數中。

通過引用傳遞實際參數和形式參數都指向相同的位置,因此函數內部所做的任何更改實際上都會反映在調用者的實際參數中。

在C語言中,參數總是按值傳遞的。例如,在下面的代碼中,不使用fun()函數修改x的值。

<code>#include <iostream> 
using namespace std;

void fun(int x) {
x = 30;
}

int main() {
int x = 20;
fun(x);
cout << "x = " << x;
return 0;
} /<iostream>/<code>

輸出:

<code>x = 20/<code>

但是,在C語言中,我們可以使用指針來獲得按引用傳遞的效果。例如,考慮以下程序。函數fun()需要指向整數(或整數地址)的指針ptr。它修改地址ptr上的值。 取消引用運算符*用於訪問地址中的值。在語句“ *ptr = 30”中,地址ptr的值更改為30。地址運算符&用於獲取任何數據類型的變量的地址。在函數調用語句“fun(&x)”中,傳遞了x的地址,以便可以使用x的地址對其進行修改。

<code>#include <iostream> 
using namespace std;

void fun(int *ptr)
{
*ptr = 30;
}

int main() {
int x = 20;
fun(&x);
cout << "x = " << x;

return 0;
} /<iostream>/<code>

輸出:

<code>x = 30/<code>

以下是有關C函數的一些要點

1)每個C程序都有一個名為main()的函數,當用戶運行該程序時,操作系統會調用該函數。

2)每個函數都有一個返回類型。如果函數不返回任何值,則將void用作返回類型。而且,如果函數的返回類型為void,我們仍然可以在函數定義的主體中使用return語句,方法是不指定常數,變量等,而只需提及“ return;”語句即可,終止功能如下圖:

<code>void function name(int a) 
{
....... //Function Body
return; //Function execution would get terminated
} /<code>

3)在C語言中,函數可以返回除數組和函數之外的任何類型。我們可以通過返回指向數組的指針或指向函數的指針來解決此限制。

4)C中的參數列表為空表示未指定參數列表,並且可以使用任何參數調用函數。在C語言中,聲明類似fun()這樣的函數不是一個好主意。要聲明不帶任何參數調用的函數,我們應使用“ void fun(void)”。

附帶說明一下,在C++中,空列表意味著只能在沒有任何參數的情況下調用函數。 在C++中,void fun()和void fun(void)相同。

5)如果在C程序中,在聲明函數之前調用了一個函數,則C編譯器將通過以下方式自動假定該函數的聲明:

<code>int function name();/<code>

在這種情況下,如果該函數的返回類型與INT不同,則編譯器將顯示錯誤。


分享到:


相關文章: