1.2 C語言--函數與數組
阿新 • • 發佈:2018-10-09
詳細 cor 行高 ret mar 編譯 自動變 如果 模塊化
-
函數
-
函數的定義
返回值類型函數名(類型形參名[,……]){
函數體
}
- 除了沒有訪問修飾符外,基本等同於java的函數。
- 良好的程序設計風格要求即使沒有返回值,也要使用return;作為最後一條語句,表示函數結束,但沒有返回值。
-
自動變量
-
自動變量
- auto 類型名變量名;
- 自動變量也稱為動態局部變量,隨著函數的加載而加載。因此函數中不同的變量能實現重名。
- 因為自動變量使用最多,因此可以省略。
- 傳給函數形參的是函數實參的一個副本,這就是按值傳遞,所以實參的值是不能在被調用的函數中修改的。
-
自動變量
-
靜態變量
-
自動變量
static 類型名變量名;
- 自動變量在定義時不會被自動初始化,在退出函數時立即釋放內存。
- 靜態變量的聲明周期是:整個程序運行期間。靜態全局變量可以被整個程序訪問,靜態局部變量只能被方法訪問。
-
自動變量
-
外部變量
-
外部變量
extern 類型名變量名;
- 在所有函數之外定義。作用域是從定義點到本文件的末尾。
-
外部變量
-
寄存器變量
-
寄存器變量
register 類型名變量名;
- 就是把經常訪問的數據放到CPU的寄存器中。通常不用的,程序也會自動優化。
-
寄存器變量
-
函數原型
- 因為C語言本質上是從頭到尾執行的。函數的定義如果在調用的前面,是無法的使用的。如果函數的定義在調用之後,就必須使用函數原型在預編譯時進行聲明。告知編譯器。
-
怎麽做
在文件頭部,添加如下命令:
返回值類型函數名(參數列表);
-
函數的定義
-
函數的設計原則
-
基本設計原則
- 函數行數不能超過50行。
- 行數功能單一,高內聚
- 函數只能有一個入口,一個出口。盡量少的使用全局變量
- 函數的入口處應該對參數的有效性進行檢查
- 不能認為一個函數總是成功的,要考慮到調用失敗的情況
- 使用return;無論有無返回值
- 在執行敏感操作時:比如除法,開方等要進行操作數和類型檢查,防止出現除零,數據溢出,類型轉換等問題。
- 某個功能重復超過三遍就應該寫成函數。
-
模塊化的程序設計
- 要高內聚,低耦合
-
自定而下,逐步求精
-
自定而下
- 先寫出結構簡單,層次清晰的主程序來表達整個問題
-
逐步求精
- 對子問題進行高級語言的實現
-
自定而下
-
程序註釋
- 不寫做什麽,而寫想做什麽,如何做。
- 基本的功能,作者,開發日期,版本號要加
- 入口參數和出口參數要詳細的說明
-
基本設計原則
-
數組
-
一元數組
-
數組的定義與初始化
- 數組:具有相同類型變量的集合
- int score[5]; // int表示數組的基本類型;5這個下標表示維度;C語言中的下標都是從0開始的。
-
為了方式數組長度的不斷該表,通常我們會將數組長度定義為常量或者宏
#define SIZE 5
int score[SIZE];
-
數組的初始化
int score[]={1,2,3,4}; // 定義了一個長度為4的數組,並初始化。
int score[4]; // 定義了一個長度為4的數組,並將數組的各個值初始為0.
-
數組的訪問
- 數組訪問越界:在C中沒有OutOfBoundary的錯誤,越界訪問會導致正常的程序也出現問題。
-
二維數組的定義與初始化
-
定義與初始化
int score[3][4]; // 定義了一個三行,四列的數組,且數組中所有的元素初始化為0.
int score[][3]={1,2,3,4,5} // 定義了一個2行3列的數組。且第二行沒有數據的地方被初始化為零。
數組的第二維長度的聲明永遠不能改變。因為C中的數組是連續的空間按行分配的。數組實際上只是代表第一個元素的地址值。
-
定義與初始化
-
向函數傳遞數組
- 向函數傳遞數組實際上就是傳遞的數組的地址值(並且傳送的是首地址)。按值傳遞,傳遞副本的話會耗費很大的資源,按地址傳遞提高效率。
-
數組的定義與初始化
-
一元數組
1.2 C語言--函數與數組