C語言中的函數和指針

什麼是函數?

      函數是程序實現模塊化編程的基本單元,一般是完成某一特定功能的語句的集合,它可以提高程序的可讀性和可維護性,病可以提高代碼重用率。

定義函數:

函數的定義由函數聲明和函數體兩部分組成。函數聲明又可以分爲:由函數返回值類型、函數名、參數列表、函數體、以及函數操作符5個部分組成。

函數返回值類型    函數名(參數類型1  參數名,參數類型參數名2,.....){

/*函數體*/

變量定義;

函數操作;

return 語句;

}

函數聲明也可以稱爲函數原型,定義了函數作爲模塊化編程的基本單元的藉口;函數值類型對應模塊出口,函數名對應模塊名,參數列表對應模塊入口。函數返回值類型也稱爲函數值類型,是由函數帶回的值的類型。

函數名是函數的標識符,其命名規範與其餘變量名一致,但是函數名應該能很清晰地反應函數操作的內容。

參數列表是函數的傳入參數列表,依次將其放在函數操作符,即小括號中。

    函數體,也被稱爲函數塊,是一個放在花括號內的複合語句。它包括三個部分:定義變量部分,函數操作部分,return 語句。

函數:代碼的模塊。

    每個程序只有一個主模塊(主函數)。

進行組織化的開發:

單元測試,有利於早發現bug

複用性。

  Call:函數調用。在一個函數裏,使用另外函數的功能。調用者&被調函數。

輸入數據:0個或多個。函數參數。

輸出數據:最多有一個。返回值。

函數頭:返回值類型 函數名(函數參數聲明)

//函數體  

}

使用函數名的三個地方:

函數聲明(函數原型),只寫函數頭,不寫函數體,不實現函數。後面有分號。

函數調用。

函數定義(函數實現),包括函數頭&函數體。

函數聲明的用法:

1.頭文件(.h)裏進行函數原型的聲明,在.c.cpp文件裏進行函數的實現。

2.main函數前進行函數原型的聲明,在main函數後進行函數的實現。

void:空類型,無類型。用在不需要值的地方。

      函數不需要參數時,可以不寫參數,也可以括號裏寫一個void

函數聲明時,可以省略參數列表裏的參數名,只寫參數類型。

向函數傳遞參數的三種方式:

傳值;

傳地址(指針);

傳引用(C++);

值傳遞:

傳值方式,在函數調用時,把實參值的一份拷貝,賦值給形參。

在被調函數體內,操作和修改的是形參的值,實參的值不受影響。

單向傳遞。從實參到形參。

默認參數 缺省參數:

當函數的某個參數有默認值時,調用時可以不傳遞實參。如果不傳遞實參,形參的值就是默認值。如果傳遞了實參,形參的值就是實參的值。

一旦某個參數有了默認值,那麼,它之後的所有參數都得有默認值。函數參數從右到左依次有默認值。

內聯函數:

內聯函數:用被調函數的函數體代碼,替換掉函數調用語句。這個替換是在編譯期間發生。

好處:避免函數調用的時間開銷,提高運行效率。

代價:增加了內存的空間開銷。所以,內聯函數要儘量短小。

函數重載(C++特有)

函數重載:兩個函數名字一樣,參數不一樣(參數個數不同、參數類型不同),成爲函數重載。

 不同的參數列表。

調用重載函數時,編譯器會根據實參的類型,找到形參類型與之匹配的那個版本的函數。

如果兩個函數僅僅是返回值類型不同,不能稱爲重載。

指針:

 指針就是一種數據類型,用來表示內存地址。使用指針數據類型聲明的變量就是指針變量,使用指針變量可以靈活地對內存空間進行靈活地操作。

訪問內存的兩種方式:

1.直接訪問

2.間接訪問

指針變量的定義:

數據類型名*指針變量名;

定義指針時,一般將指針操作符放在靠近變量名的位置。

初始化指針變量:

  使用指針變量時,也應該在其定義語句中爲其需要初始化,否則指針將指向一個不可知的空間。

  使用指針變量時,必須明確該指針變量指向的內存空間(變量)。因此,必須對指針變量初始化;如果不能明確設定其指向的對象,就將其初始化爲null。

指針與函數:

指針形參:

函數調用時,將實參的值賦給形參。使用指針變量作爲函數參數,可以將一個內存空間的地址傳遞到函數中,可以通過該地址來操作該地址上的內存空間。

地址傳遞並不是說傳遞是實參的地址,而是指傳遞的是一個變量的地址,這個地址仍是實參的值。地址傳遞實質上仍是值傳遞。

指針型函數值:

函數的函數返回值也可以使指針型的數據,即地址。返回該類型值時,執行機制與返回其他類型完全相同。

含有指針型函數值的函數的聲明一般爲:

     數據類型 * 函數名(形參列表);

其中,數據類型和指針操作符組成指針類型。

函數型指針:函數指針就是指向函數的指針。

函數型指針變量賦值時,左值與右值的類型必須完全一致。

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