C語言基礎知識之函式

2021-08-02 02:57:41 字數 2094 閱讀 4158

函式分類:

1.庫函式;使用者定義函式

2.有返回值函式;無返回值函式

3.無參函式;有參函式

c程式的執行總是從main函式開始,完成對其它函式的呼叫再返回到main函式中,最後由main函式結束整個程式。其他函式定義的位置任意。

函式定義的一般格式:

儲存型別 資料型別 函式名(形參定義表)

例:求兩數之間的最大值

/*函式定義

int max(int a,int b)   /*int 是函式型別,無返回值時型別是void,如果省略型別名,一律按整型處理。

void main()

省去主調函式對被調函式的函式說明的三種情況

1.被調函式的返回值值整型或者字元型時

2.被調函式的函式定義出現在主調函式之前時,在主調函式可以直接呼叫

3.在所有函式定義之前,子啊函式外預先說明了各個函式的型別,則在以後的主調函式中,可不再說明。 例:

char str(int a);

main()

char str(int a)

4.對庫函式的呼叫不需要在做說明,但必須把該函式的標頭檔案用include命令包含在原始檔前部。

return語句的格式如下:

return 表示式;

或   return(表示式);

或   [return;]

無返回值函式的末尾可以有有乙個不帶表示式的return語句。

當函式的返回值型別與函式定義時的型別不一樣的時候,返回值自動轉換成函式定義的型別。

在函式形參表中,允許不給出性引數組的長度,或者用乙個變數來表示陣列元素的個數

例: void nzp(int a)

或   void nzp(int a, int n)  /*n動態的該處陣列長度

當形參為陣列時,實參與形參實際上是同一陣列,他們的值同時改變。陣列名就是首位址,因此在陣列名作函式引數時所進行的傳送只是位址的傳送,也就是說把是引數組的首位址賦予型參陣列名。

內部函式與外部函式

內部函式:在乙個原始檔中定義的函式只能被本院檔案中的函式呼叫,而不能在同一程式中其它原始檔的函式呼叫。

定義:static 資料型別 函式名(形參定義表)  

外部函式:在乙個原始檔中的函式也可被其他原始檔中的函式所呼叫。

定義:extern可省略,一般的函式都是外部函式

[extern] 

資料型別 函式名(形參定義表)  

在呼叫外部函式時需要宣告。

函式的遞迴呼叫:

例:用遞迴法計算n!

long ff(int n)

main()

變數:

1.區域性變數的定義和說明可以不加區別,外部變數需要。(全域性變數與外部變數是同一種,全域性變是從它的作用域提出的,外部變數是從它的儲存方式提出的)

外部變數只能定義一次:例 [extern]型別說明符 變數名1,2,…

[extern] int a, b;  /*extern可省略

2.在同一原始檔中,允許全域性變數和區域性變數同名。在區域性變數的作用域內,全域性變數不起作用。

3.變數的儲存方式可分為兩種,靜態與動態。靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不定,直至整個程式結束。動態儲存變數是在程式執行過程中,使用它時才分配儲存單元。靜態區域性變數在函式內定義,但生存期是整個程式,雖然離開了定義它的程式就不能使用,但是如果再次呼叫定義它的函式的時候,它又可繼續使用並保留了上一次呼叫它的時候留下的值。靜態全域性變數則只能在同一原始檔中才能使用,其他檔案不能呼叫。

變數的儲存型別:

動態儲存方式: auto(自動變數,使用最廣,可省略,不可作初始化賦值),register(暫存器變數,其他變數都存放在儲存器中,這種變數存放在cpu的暫存器中,使用時不需要訪問記憶體,直接從暫存器中讀寫,可提高效率)

靜態儲存方式:extern(外部變數),static(靜態變數)

C語言基礎知識之 pragma once

一般用於標頭檔案開始,預編譯時,只插入一次此標頭檔案。例如 標頭檔案 grandfather.h pragma once ifndef grandfather h define grandfather h struct foo endif grandfather h 當這段程式多次被include ...

C語言基礎知識

1 的問題。int i 1 int j 2 int k i j printf d k 輸出k為3。編譯原理有關編譯器在詞法解析的時候,對於運算子,總是查詢最大的匹配也就是說,i j,編譯器在找到 的時候,它不立即理解為 而是繼續下乙個字元,下乙個字元仍然是 可以組成 再往下的話便是 不成立了。所以i...

C語言基礎知識

一 位元組對齊 位元組對齊的原因,是機器在訪問記憶體中儲存的資料的高效性。通常機器是機器位數為自然邊界來訪問記憶體的,如果乙個4位元組整形數,所在的記憶體不在虛擬記憶體的自然邊界。則cpu需要讀多於一次的資料,這樣就降低了效率。所以,簡單地說,就是保證cpu指令在訪問資料的時候,能一次讀取,而不需要...