今天主要學習到的是靜態變數(static)、暫存器變數(register)、初始化、遞迴、預處理器。
比較容易混淆的是關於靜態變數的,而靜態變數分為:靜態區域性變數和靜態全域性變數。
靜態區域性變數:
(1)、靜態區域性變數在函式內定義 它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。
(2)、允許對構造類靜態區域性量賦初值 例如陣列,若未賦以初值,則由系統自動賦以0值。
(3)、對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。 根據靜態區域性變數的特點, 可以 看出它是一種生存期為整個源程式的量。雖然離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的 值。 因此,當多次呼叫乙個函式且要求在呼叫之間保留某些變數的值時,可考慮採用靜態區域性變數。雖然用全域性變數也可以達到上述目的,但全域性變數有時會造成 意外的***,因此仍以採用區域性靜態變數為宜
靜態全域性變數:
全域性變數(外部變數)的說明之前再冠以static 就構 成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。 這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性 變數的作用域是整個源程式, 當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在 定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用, 因此 可以避免在其它原始檔中引起錯誤。從以上分析可以看出, 把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數 後是改變了它的作用域, 限制了它的使用範圍。因此static 這個說明符在不同的地方所起的作用是不同的。
初始化:不顯示初始化的情況下,外部變數和靜態變數初始化為0,自動變數和暫存器變數則沒有定義。顯示初始化的情況下,外部變數和靜態變數必須是常量表示式,且初始化一次,而自動變數和暫存器變數則每次進入函式程式塊時都會進行初始化。
遞迴:函式直接或者間接的呼叫本身。但是相對於效能來講開銷會大一些,而且速度也不快,但是**比較緊湊,容易編寫和理解。
預處理器:是編譯過程單獨執行的第乙個步驟。指令包括:#include(用於在編譯期間把指定檔案的內容包含到當前檔案中)和#define(用於任意字串行替代乙個標記).
c c學習筆記 (6)
關於運算子過載 不可過載的運算子 賦值 下標 呼叫 成員訪問箭頭 運算子 相對的解引用 也應該是成員函式 必須是成員函式,復合賦值運算子一般來說也應該是成員。改變物件狀態的運算子如自增 自減 解引用等通常也應該是成員,對於這些成員運算子函式應該返回所屬類的乙個物件。具有對稱性的運算子可能轉換任意一端...
C C 學習筆記 基礎知識6
1複雜表示式與序列點 序列點是乙個時間點 在整個表示式全部計算完畢之後或在 或逗號運算子處,或在函式呼叫之前 此刻塵埃落定,所有的 都已確保結束.ansi iso c 標準這樣描述 在上乙個和下乙個序列點之間,乙個物件所儲存的值至多只能被表示式的計算修改一次。而且前乙個值只能用於決定將要儲存的值。i...
C C 學習筆記6 const運用(1)
1 在說明const之前首先提出乙個問題 const有什麼用途?2005年某公司面試題 解析 在c程式中,const的用法主要有定義常量 修飾函式引數 修飾函式返回值 在c 程式中,它還可以修飾函式的定義體,定義類中某個函式為恆態函式,即不改變類中的資料成員。答案 1 可以定義常量 2 const可...