C語言基礎:函數的定義與調用

        在前面內容中我們調用了一個標準C的庫函數,叫printf,那麼如果我們想自己定義函數應該如何來編寫程序呢?定義函數又有什麼好處呢?因爲我們在教材中提及到的例子主要目的是爲了讓讀者對程序的原理有一定的瞭解,所以設定的例子程序通常都比較簡單,基本上在幾行到十幾行,多一點的也就三五十行代而已,但是在真正的編程工作中,我們需要完成的代碼將非常大,所以將代碼合理的分爲不同的區塊是很有必要的,每一個區塊具有相對獨立的功能,併爲其它程序提供對外調用的參數和返回值,這樣由多個區域組成的程序纔會讓程序閱讀者更方便的理解程序設計的理念。並可以通過函數讓功能被封裝起來,使得一個功能可以在不同的情況下被其它功能調用,函數的概念就是這樣產生的。我們來看看函數的定義與使用。

        一、定義函數

        定義一個函數我們需要確定三部分內容:

1.函數的返回值類型

2.函數的名稱

3.函數的參數

        確定了以上內容後就可以定義一個特有功能的函數了:

 

int wrongplus(int a, int b)
{
    a = a + 1;
    b = b + 1;
    return a + b;
}

 

        例如上面代碼中就定義了一個返回值爲int類型的函數,其函數名爲wrongplus,一對小括號中的內容爲這個函數的參數,也就是說這個函數有兩個傳入參數int a和int b。在函數體內,分別讓a在原來的基礎上加1,讓b在原來的基礎上加1,然後使用return關鍵字返回a + b的和。如果a的值是2,而b的值是3,那麼這個函數的返回值則是7。

        如果我們想定義一個沒有返回值類型的函數則需要設計其返回值類型爲void,同樣,如果我們想定義一個沒有參數的函數可以將其參數定義爲void,通常如果一個函數沒有參數可以在函數名後的小括號裏什麼都不寫,例如:

 

void function1(void)
{
}
void function2() 
{ 
}

 

        二、函數調用與聲明

        我們定義了這樣一個wrongplus()的函數,那麼如何來讓其它功能使用它呢?我們看下面程序:

 

#include <stdio.h>
main()
{
	int a = 2, b = 3;
	int c;
	int wrongplus(int a, int b);
	c = wrongplus(a, b);
	printf("%d + %d = %d\n",a, b, c);
}
int wrongplus(int a, int b)
{
    a = a + 1;
    b = b + 1;
    return a + b;
}

2 + 3 = 7

       如果函數的定義是在調用函數的後面(下面)則需要在調用之前聲明函數的定義,否則不需要事先聲明。聲明的意思是告訴編譯器,這個函數的返回值類型、函數名和參數。

        我們在調用一個函數時,需要向這個函數傳其需要的參數,例如a和b這兩個變量,並可以指定另一個變量用於接收這個函數執行後的返回值,比如變量c就接收了函數wrongplus()的返回值,結果爲7。但是我們看到程序的運行結果是 2 + 3 = 7,也就是說,執行了函數wrongplus()後,我們雖然對函數內的參數變量分別加1,但主函數main中的a和b的值並沒有發生變化。

 

        三、實參與形參

        當我們調用函數時,對其傳入的參數和函數體內接收到的參數其實並不是同一個變量。調用函數時向函數傳入的參數稱作實際參數,簡稱實參,而函數體內部用於接收外部調用時傳入的參數的參數稱爲形式參數,簡稱形參

        例如上面例子中,在main函數中定義的變量int a和int b,在調用wrongplus(a, b);時這兩變量是實參,也就是將這兩個變量的值2和3傳入到函數內部。而在函數wrongplus()的函數體內,用於接收這兩個參數時的int a和int b則是形參,這是函數體內部額外的兩個變量,用於接收2和3這兩個值,這兩個變量並不是main函數中定義的a和b 。

        在wrongplus()函數體內,對形參做a = a + 1;和b = b + 1;操作,其實隻影響到了函數體內部的這兩個變量,而並未影響到main函數中的變量a和b的值。所以,在wrongplus()函數體內的a和b的值爲3和4,函數運行結果的返回值爲7,而在main函數中的a和b兩變量的值仍然是2和3,所以printf()函數顯示出的結果則是 2 + 3 = 7 。


歡迎關注公衆號:編程外星人

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