C 語言基礎(三)

2021-07-10 11:57:43 字數 3195 閱讀 4063

自定義函式的一般形式:

注意:

包含的內容可以省略,資料型別說明省略,預設是int型別函式;

函式名稱遵循識別符號命名規範;

自定義函式盡量放在main函式之前。如果要放在main函式後面的話,需要在main函式之前先宣告自定義函式,宣告格式為:[資料型別說明] 函式名稱([引數]);

自定義乙個sayhello()函式,示例**:

int sayhello()
注意:

void函式中可以有執行**塊,但是不能有返回值。

void函式中如果有return語句,該語句只能起到結束函式執行的功能,其格式為:return;

例如:計算n的階乘可以使用以下**:

遞迴函式特點:

每一級函式呼叫時都有自己的變數,但是函式**並不會得到複製;

每次呼叫都會有一次返回,如計算5的階乘時每遞推一次都返回進行下一次;

遞迴函式中,位於遞迴呼叫前的語句和各級被呼叫函式具有相同的執行順序;

遞迴函式中,位於遞迴呼叫後的語句的執行順序和各個被呼叫函式的順序相反;

遞迴函式中必須有終止語句。

一句話總結遞迴:自我呼叫且有完成狀態。

c 語言根據變數的生存週期來劃分,可以分為靜態儲存方式和動態儲存方式。

靜態儲存方式:是指在程式執行期間分配固定的儲存空間的方式。靜態儲存區中存放了在整個程式執行過程中都存在的變數,如全域性變數。

動態儲存方式:是指在程式執行期間根據需要進行動態的分配儲存空間的方式。動態儲存區中存放的變數是根據程式執行的需要而建立和釋放的,通常包括:函式形式引數;自動變數;函式呼叫時的現場保護和返回位址等。

c 語言中儲存類別又分為四類:自動(auto)、靜態(static)、暫存器的(register)和外部的(extern)。
用關鍵字auto定義的變數為自動變數,auto可以省略,auto不寫則隱含定為「自動儲存類別」,屬於動態儲存方式。

static修飾的為靜態變數,如果定義在函式內部的,稱之為靜態區域性變數;如果定義在函式外部,稱之為靜態外部變數。

為了提高效率,c 語言允許將區域性變數得值放在 cpu 中的暫存器中,這種變數叫「暫存器變數」,用關鍵字register宣告。

extern宣告的的變數是外部變數,外部變數的意義是某函式可以呼叫在該函式之後定義的變數。

注意:

靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,在程式整個執行期間都不釋放;靜態區域性變數在編譯時賦初值,即只賦初值一次;如果在定義區域性變數時不賦初值的話,則對靜態區域性變數來說,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)。

只有區域性自動變數和形式引數可以作為暫存器變數。乙個計算機系統中的暫存器數目有限,不能定義任意多個暫存器變數;區域性靜態變數不能定義為暫存器變數。

c 語言中不能被其他原始檔呼叫的函式稱謂內部函式,內部函式由static關鍵字來定義,因此又被稱謂靜態函式,形式為:

static [資料型別] 函式名([引數])
這裡的static是對函式的 作用範圍 的乙個限定,限定該函式只能在其所處的原始檔中使用,因此在不同檔案中出現相同的函式名稱的內部函式是沒有問題的。

c 語言中能被其他原始檔呼叫的函式稱謂外部函式 ,外部函式由extern關鍵字來定義,形式為:

extern [資料型別] 函式名([引數])
c 語言規定,在沒有指定函式的作用範圍時,系統會預設認為是外部函式,因此當需要定義外部函式時extern也可以省略。

陣列在程式中是一塊連續的,大小固定並且裡面的資料型別一致的記憶體空間。

c 語言中陣列初始化有三種形式,分別是:

1. 資料型別 陣列名稱[長度n] = ;

2. 資料型別 陣列名稱 = ;

3. 資料型別 陣列名稱[長度n];

陣列名稱[0] = 元素1;

陣列名稱[1] = 元素2;

陣列名稱[n] = 元素n+1;

注意:

陣列的下標均以0開始;

陣列在初始化的時候,陣列內元素的個數不能大於宣告的陣列長度;

如果採用第一種初始化方式,元素個數小於陣列的長度時,多餘的陣列元素初始化為0;

在宣告陣列後沒有進行初始化的時候,靜態(static)和外部(extern)型別的陣列元素初始化元素為0,自動(auto)型別的陣列的元素初始化值不確定。

注意:

中的長度是可以省略不寫的;

採用第2種方式的時候最後乙個元素必須是』\0』,』\0』表示字串的結束標誌;

採用第2種方式的時候在陣列中不能寫中文。

例如:

int num[3][3] = , , };
我們可以把上面的陣列看作乙個3×3的矩陣,如下圖:

注意:多維陣列的每一維下標均不能越界。
c 語言入門

C語言基礎三

預處理指令 以 號開頭,可以寫在任何位置,在編譯之前執行 巨集定義檔案包含 條件編譯 一 巨集定義 無引數 有引數 num叫做巨集名,6是用來替換巨集名的字串 define num 10 條件一般需要用到巨集定義 if 條件1 不可以放變數 code1。如果條件1成立,則把code1編譯程序式 el...

c語言基礎(三)

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。分別為 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應...

C語言基礎(三)

指標 不論什麼指標型別,指標的大小總是由機器位數決定,例如32位客戶端指標占用4個位元組 取位址 在定義時表示指標變數,在用時表示取值p p指向的位址 p p指向的位址值 int p p 3 上述會出現段錯誤,修改了未定義的記憶體,指標指向不明 p 與 p p的區別?p 指p指向內容,然後內容 1 ...