函數和函數指針

函數

概念:一個完成特定工作的獨立模塊。

分類

  1. 庫函數:由c語言系統定義,直接調用。如printf()、scanf()等。
  2. 自定義函數:用戶自己定義的函數。

函數定義的一般形式

函數類型 函數名(形式參數表)    //函數首部

{

                函數實現過程           //函數體

}

函數首部

  1. 函數首部由函數類型、函數名、形式參數表組成,位於函數的第一行。
  2. 函數類型指函數結果返回的類型,一般與return語句中表達式的類型一致。
  3. 形參表中給出函數計算所用到的已知條件,以類似變量定義的形式給出,其格式爲:

   類型1 形參1,類型2 形參2,…,類型n,形參n

注:

  • 形參表中各個形參以逗號隔開,每個形參前面的類型必須寫明。函數的形參可以是一個,可以是多個,也可以沒有形參。
  • 函數首部後面不能加分號。它和函數體一起構成完整的函數定義

函數體

由一對大括號內的若干條語句組成,用以計算、或者完成特定的工作,並用return語句返回運算的結果。

函數的調用

調用標準庫函數時,只需在程序最前面用#include包含相應的頭文件。調用自定義函數時,程序中必須有與調用函數相對應的函數定義。

(1).函數調用過程

  任何c程序執行,都是從主函數main()開始,如果遇到某個函數調用,主函數被暫停執行,轉而執行相應的函數,該函數執行完成後返回主函數,然後再從原來暫停的位置繼續執行。

主調函數:調用其他函數的函數。

被調函數:被調用的函數。

(2).函數調用形式

函數名(實際參數表);

實際參數(簡稱實參)可以是常量、變量和表達式,

(3).參數傳遞

   實參:形式上的參數,主調函數的參數。

形參:實際存在的參數,函數首部的參數。

程序運行遇到函數調用時,實參的值依次傳給形參,這就是參數傳遞。

注:函數的形參必須是變量,用於接受實參傳遞過來的值。而實參可以是常量、變量、或表達式,其作用是把常量、變量、表達式的值傳遞給形參。在參數傳遞過程中,參數傳遞是單向的,形參的值不會反過來影響實參。

實參和形參一一對應、數量應相同、順序應一致

(4).函數結果返回

函數結果返回形式:

        return  表達式;

return語句的作用:1.結束函數運行;2.帶着運算結果(表達式的值)返回主調函數。

注;return語句只能返回一個值。

(5).函數原型聲明

   如果自定義函數放在主函數後面,就需要在函數調用前。加上函數原型聲明(或稱爲函數聲明)。函數聲明的目的主要是說明函數的類型和參數的情況,以保證程序編譯時能判斷該函數的調用是否正確。調用的一般格式爲:

     函數類型 函數名(參數表);

有參函數聲明時形參列表只需要把參數類型給出就可以,如:int power(int,int)

注:函數聲明是一條c語句,必須以分號結束。

 

特殊的函數

空函數:函數體內沒有語句的函數,如:

 void empty(){

}

作用:留出一個位置以後再添加其中的功能;

外部函數:在一個文件模塊中調用另一模塊中的函數,就需要對函數進行外部聲明。其格式爲:

extern 函數類型 函數名(形參表);

內部函數:在一個源文件中,只能被本文件模塊調用的函數,而不能被其他文件模塊調用的函數。定義一般格式是:

static 函數類型 函數名 (形參表);

main函數

main函數可以調用其他函數,但其他函數不能調用main函數。main 函數也不能調用自己。

main 函數可以帶有兩個參數,其一般形式是:

   int main(int argc,char *argv[])

   {

      函數體

}

argc傳遞給函數的參數的個數,*argv[]指向字符串的指針數組。

 函數指針

int **ptr;		//聲明一個指向指針的指針,被指向的指針指向int類型 
int *risks[10];		//聲明一個內含十個元素的數組,該數組內含10個int類型
int (*risks)[10];	//聲明一個指向數組的指針,該數組內含10個int 類型
int *oof[3][4];		//聲明一個3*4的二維數組,每個元素都是指向int的指針
int (*uuf)[3][4];	//聲明一個指向3*4二維數組的指針,該數組中內含int類型值
int (*uof[3])[4];	//聲明一個內含三個指針元素的數組,其中 每個指針都指向一個內含4個int類型元素的數組 
typedef char (*FRPTC())[5];		//把FRPTC聲明爲一個函數類型 ,該函數返回一個指針, 該指針指向內含5個char類型元素的數組 

 

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