c 第六章函式

2021-08-17 13:34:20 字數 2969 閱讀 2545

基礎知識總結

一、函式定義

c++程式的典型結構:

第1部分:預處理指令

符號常量定義

函式宣告

第2部分:主函式

第2部分:函式定義

函式定義的形式:

資料型別  函式名(形式參數列)

{函式體    //執行語句

}注:1、資料型別是函式的返回值型別,若資料型別為void,則無返回值。

2、形式參數列可以是空的(即無參函式)。

3、函式不允許巢狀定義,但允許巢狀使用

函式的形式:

從結構上分為三種:無參函式,有參函式和空函式

1、無參函式即為沒有引數傳遞的函式,無參函式一般不需帶回函式值,所以資料型別為void。

2、有參函式即有引數傳遞的函式,一般需帶回函式值。

3、空函式即函式體只有一對花括號,花括號內沒有任何語句的函式,在大型程式設計中,用於擴充函式功能。

二、函式的宣告與呼叫

函式的宣告:

呼叫函式之前先要宣告函式原型:

型別說明符  被調函式名(含型別的形參表)

注:如果在所有函式定義之前宣告了函式原型,那麼在本程式檔案中任何地方都可以呼叫該函式。如果是在某個主調函式內部宣告了被呼叫函式原型,則該原型只在這個函式內部有效。

函式的呼叫:

宣告了函式原型之後,便可按如下形式呼叫函式:

函式名(實參列表)

注:實參列表中應給出與函式原型形參個數相同、型別相符的實參,實參可以是常量、表示式,也可以是已有確定值的變數、陣列或指標名。

函式的返回值:

返回語句 return:

return(表示式)

注:return語句的功能是把程式流程從被調函式轉向主調函式並把表示式的值帶回主函式,實現函式的返回。所以,在圓括號表示式的值實際上就是該函式的返回值。

返回語句的另一種形式是:

return;

這時函式沒有返回值,而只把流程轉向主調函式。

三、函式的呼叫方式:

1、傳值呼叫

這種呼叫方式是將實參的資料值傳遞給形參,即將實參值拷貝乙個副本存放在被呼叫函式的棧區中。在被呼叫函式中,形參值可以改變,但不影響主調函式的實參值,引數傳遞方向只是從實參到形參,簡稱單向傳遞。

2、傳引用

定義時在形參前加&,如int

&a。這時實參和形參兩個變數指向同乙個物件,形參改變實參也會改變。

3、傳址呼叫(傳位址)

這種呼叫方式是將實參變數的位址值傳遞給形參,這時形參是指標,即讓形參的指標指

向實參位址,這裡不再是將實參拷貝乙個副本給形參,而是讓形參直接指向實參,這就提供

了一種可以改變實參變數的值的方法。

定義時在變數前加*,即為定義指標變數,如int *a,a即為指標變數。

在變數前加&,即取變數的位址,如&b,即為取變數b的位址,a=&b,即把指標變數a指向變數b。

指標變數前加

*,即取指標變數指向的目標變數的內容,如b=

*a,即把指標變數a指向的目標變數的值賦予變數。

四、全域性變數、區域性變數及他們的作用域

全域性變數:

定義在函式外部的變數稱為全域性變數,全域性變數的作用域是從變數定義的位置開始到檔案結束,可以在檔案中位於全域性變數定義後面的任何函式中使用。

區域性變數:

1、區域性變數的作用域是定義在該變數的函式內部,區域性變數只在定義它的函式內有效。

2、在不同的函式中變數名可以相同,他們分別代表不同的物件,在記憶體中佔據不同的記憶體單元,互不干擾。

3、乙個區域性變數和乙個全域性變數是可以重名的,在相同的作用域內區域性變數有效時全域性變數無效,即區域性變數可以遮蔽全域性變數。

4、在**快中定義的變數的存在時間和作用域即將限制在該**塊中。

5、主函式main中定義的變數也是區域性變數(與其他程式語言不同)。

6、全域性變數陣列初始全部為0,區域性變數值是隨機的,要初始化初值,區域性變數受棧空間大小限制,大陣列需要注意。區域性變數的陣列不能開很大,全域性變數隨意。

例題分析

1、使用函式實現求兩個自然數的最大公約數

#include

using namespace std;

int cf(int x,int y)                

int 

main( )

int cf(int x,int y)            

r = m % n;

while (r != 0)                       

return n;

}用輾轉相除法求最大公約數。

2、傳引用交換兩變數的值

傳引用:

#include

using namespace std;

void swap(

int&

a, int &b

)int main()

int n1,n2;

swap(n1,n2)

cout使用傳引用來交換變數的值。

3、輸入a、b兩個整數,按大小輸出這兩個數(傳位址)

#include

using namespace std;

swap(

intx,

inty

)int  

main( )

通過傳位址對變數a、b排大小。

學習心得

對於函式,我們要先想這個函式能

實現什麼功能

,然後再去考慮這個函式中我們要採用

什麼樣的傳值方式

,最後再去考慮

函式體的寫法

。說白了,函式就是把龐大冗長的主函式中分為很多個

可讀的小部分

,讓本來讓人讀起來很難過的主函式變得可讀,增強了程式的

可讀性,並且

易於發現程式的問題

,我們調程式的時候可以通過函式乙個乙個的呼叫,來發現是哪個函式出現了問題,使我們的改錯效率大大提公升。

第六章函式

第六章 函式 重要知識點 1 函式定義的語法形式 資料型別 函式名 形式參數列 關於函式的定義有如下說明。函式的資料型別是函式的返回值型別 若資料型別為void,則無返回值 函式名是識別符號,乙個程式中除了主函式名必須為main外,其餘函式的名字按照識別符號的取名規則可以任意選取。形式引數 簡稱形參...

第六章 函式

示例 使用函式列印菱形 include intprint star int main intprint star int i,j for i 0 i 4 i 定義無參函式 函式名後面的括號中是空的,沒有任何引數,定義無參函式的一般形式為 型別名 函式名 或 型別名 函式名 void 函式體包括宣告部...

第六章 函式作業

e201 06 07 驗證四位卡布列克數 題目要求 如題 解題思路 1.輸入乙個四位數 2.判斷輸入的數是不是6174 3.定義函式 4.求出這個數的各個位 5.運用冒泡轉化 6.迴圈輸出6174 public class e201 06 07 驗證四位卡布列克數 private static in...