1. 程式人生 > >1.2 C語言--函數與數組

1.2 C語言--函數與數組

詳細 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語言--函數與數組