第六章 函式

2021-10-05 15:10:49 字數 3366 閱讀 2320

**示例:使用函式列印菱形

#include

intprint_star()

;int

main()

intprint_star()

,,,,

};int i, j;

for( i =

0; i <=

4; i++

)}

定義無參函式:函式名後面的括號中是空的,沒有任何引數,定義無參函式的一般形式為:

型別名 函式名()或

型別名 函式名 (

void

)

函式體包括宣告部分語句部分。在定義函式時要用「型別識別符號」(即型別名)指定函式值的型別,即指定函式帶回來的值的型別。

定義有參函式:有參函式的一般形式為:

型別名 函式名(形式引數表列)

函式體包括宣告部分語句部分,如:

int max (

int x,

int y)

宣告部分包括對函式中用到的變數進行定義以及對要呼叫的函式進行宣告等內容,return z;的作用是指定將z的值作為函式值(稱函式返回值)帶回到主調函式。

定義空函式:在程式設計中有時會用到空函式,它的形式為:

型別名 函式名 ()如:

void dummy (

)

函式體是空的,呼叫此函式時,什麼工作也不做,沒有任何實際作用。

函式呼叫時的資料傳遞

除了可以用陣列元素作為函式引數外,還可以用陣列名作函式引數(包括實參和形參)。用陣列元素作實參時,向形參變數傳遞的是陣列元素的值,而用陣列名作函式實參時,向形參(陣列名或指標變數)傳遞的是陣列首元素的位址。

num和a使用同乙個記憶體空間,一旦通過a[0]改變了值,對應的num[0]也改變值內容。

可以用多維陣列名作為函式的實參和形參,在被呼叫函式中對形引數組定義時可以指定每一維的大小,也可以省略第一維的大**明,例如:

int ayyar[3]

[10];或int array[

10];

二者都合法且等價,但是不能把第二維以及其他高維的大**明省略。二維陣列是由若干個一維陣列組成的,在記憶體中,陣列是按行存放的,在定義二維陣列時,必須指定列數(即一行中包含幾個元素),由於形引數組與實參陣列型別相同,所以它們是具有相同長度的一維陣列所組成的。在第二維大小相同的前提下,形引數組的第一維可以與實參陣列不同。這是因為c語言編譯系統不檢查第一維的大小。

全域性變數:程式的編譯單位是源程式檔案,乙個原始檔可以包含乙個或若干個函式。在函式內定義的變數是區域性變數,而在函式之外定義的變數稱為「外部變數」,外部變數是「全域性變數」。全域性變數可以為本檔案中其他函式所共用。它的有效範圍從定義變數的位置開始到本原始檔結束。

使用全域性變數過多,會降低程式的清晰性,由於在各個函式執行時都可能會改變外部變數的值,程式容易出錯。

區域性變數的儲存類別:

自動變數(auto變數):不專門宣告為static(靜態)儲存類別,都是動態的分配儲存空間的,資料儲存在動態儲存區中。在呼叫該函式時,系統會給這些變數分配儲存空間,在函式呼叫結束時就自動釋放這些儲存空間。因此這類區域性變數稱為自動變數。自動變數用關鍵字auto作儲存類別的宣告,關鍵字auto可以省略,不寫auto則隱含指定為「自動儲存類別」,它屬於動態儲存方式。程式中大多數變數屬於自動變數。

靜態區域性變數(static區域性變數):函式中區域性變數的值占用的儲存單元不釋放,指定該區域性變數為「靜態區域性變數」,用關鍵字static進行宣告。

暫存器變數(register變數):暫存器的訪問速度遠遠高於記憶體的讀取速度,因此一般把需要反覆讀取的變數冠上register,代表暫存器變數。但現代計算機讀取速度非常快,效能非常高,編譯系統能夠識別反覆需要讀取的變數,從而自動的將對應的變數存放在暫存器中。在實際編寫**中,無需再對變數進行register宣告。

注意:3種區域性變數的儲存位置是不同的:自動變數儲存在動態儲存區;靜態區域性變數儲存在靜態儲存區;暫存器變數儲存在cpu中的暫存器中。

全域性變數的儲存類別:全域性變數都是存放在靜態儲存區中的,生存週期是固定的,存在於程式的整個執行過程。外部變數是在函式的外部定義的全域性變數,它的作用域是從變數的定義處開始,到本程式檔案的末尾。在此作用域內,全域性變數可以為程式中各個函式所引用。但有時程式設計人員希望能擴充套件外部變數的作用域,有以下幾種情況:

在乙個檔案內擴充套件外部變數的作用域:如果外部變數不在檔案開頭定義,其有效的作用範圍只限於定義處到檔案結束。在定點之前的函式不能引用該外部變數。如果由於某種考慮,在定義點之前的函式需要引用該外部變數,則應該在引用之前用關鍵字extern對該變數作"外部變數宣告",表示把該外部變數的作用域擴充套件到此位置。用extern宣告外部變數時,型別名可以寫也可以省寫,例如:

extern

int a,b,c;

或者 extern a,b,c;

因為它不是定義變數,也可以不指定型別,只需寫出外部變數名即可。

將外部變數的作用域擴充套件到其他檔案:如果乙個程式包含多個檔案,假如a檔案定義了外部變數,b檔案要想使用a檔案中的外部變數,需要用extern進行變數宣告。

將外部變數的作用域限制在本檔案中:有時在程式設計中希望某些外部變數只限於被本檔案引用,而不能被其他檔案引用,這時可以在定義外部變數時加乙個static宣告。這種加上static宣告、只能用於本檔案的外部變數稱為靜態外部變數。如果已確認其他檔案不需要引用本檔案的外部變數,就可以對本檔案中的外部變數都加上static,成為靜態外部變數,以免被其他檔案誤用。

(1)全域性變數也是靜態儲存。

(2)提倡將外部變數的定義放在引用它的所有函式之前,可以避免在函式中多加乙個extern宣告。

說明:對於區域性變數來說,宣告儲存型別的作用是指定變數儲存的區域(靜態儲存區或動態儲存區)以及由此產生的生存期的問題,而對於全域性變數來說,由於都是在編譯時分配記憶體的,都存放在靜態儲存區,宣告儲存型別的作用是變數作用域的擴充套件問題。

儲存類別小結:

第六章函式

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

c 第六章函式

基礎知識總結 一 函式定義 c 程式的典型結構 第1部分 預處理指令 符號常量定義 函式宣告 第2部分 主函式 第2部分 函式定義 函式定義的形式 資料型別 函式名 形式參數列 函式體 執行語句 注 1 資料型別是函式的返回值型別,若資料型別為void,則無返回值。2 形式參數列可以是空的 即無參函...

第六章 函式作業

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