c語言有豐富的資料型別和運算子,因此計算能力非常強大,計算過程中使用的值一般用變數來儲存。變數也是有分型別的,不同型別的變數有不同的儲存型別、不同的生命週期、不同的作用域,c語言也提供了一些關鍵字來設定變數的屬性(比如設定儲存型別、生命週期)。
1 變數的作用域
c語言根據變數作用域的不同,將變數分為區域性變數和全域性變數。
1.1 區域性變數
(1) 定義:在函式內部定義的變數,稱為區域性變數。形式引數也屬於區域性變數。
(2) 作用域:區域性變數只在定義它的函式內部有效,即區域性變數只有在定義它的函式內部使用,其它函式不能使用它。
1.2 全域性變數
(1) 定義:在所有函式外部定義的變數,稱為全域性變數。
(2) 作用域:全域性變數的作用範圍是從定義變數的位置開始到源程式結束,即全域性變數可以被在其定義位置之後的其它函式所共享。
2 變數的儲存型別
(1) 變數的儲存型別就是指變數儲存在什麼地方。有3個地方可以用於儲存變數:普通記憶體、執行時堆疊、硬體暫存器。變數的儲存型別決定了變數何時建立、何時銷毀以及它的值能保持多久,也就是決定了變數的生命週期。
(2) 根據不同的儲存型別,變數可以分為如下三種:自動變數、靜態變數、暫存器變數。
2.1 自動變數
(1) 儲存在堆疊中的變數稱為自動變數,自動變數用關鍵字auto修飾。所有的區域性變數在預設情況下都是自動變數,所以一般很少用這個關鍵字。
(2) 程式執行到**塊或者函式時,**塊或者函式內的自動變數才會被建立,**塊或者函式執行完畢,自動變數都會被銷毀。如果乙個**塊或者函式被重複執行,內部的自動變數也會重新建立和銷毀
2.2 靜態變數
(1) 儲存在靜態記憶體中的變數稱為靜態變數。所有的全域性變數都是靜態變數,被關鍵字static修飾的區域性變數也是靜態變數。
(2) 程式執行之前,靜態變數就已經建立好了,直到程式結束。
2.3 暫存器變數
(1) 儲存在硬體暫存器中的變數稱為靜態變數。暫存器變數比儲存在記憶體中的變數訪問效率更高(預設情況下,自動變數和靜態變數都是放在記憶體中的。
(2) 被關鍵字register修飾的自動變數都是暫存器變數,並且只有自動變數才可以是暫存器變數,全域性變數和靜態區域性變數不能是暫存器變數;暫存器變數只能是int,char和指標型別的。
(3) 程式執行到**塊或者函式時,**塊或者函式內的暫存器變數就會占用某個暫存器,一旦**塊或者函式結束,該暫存器就會被釋放。
(4) 由於計算機中暫存器數目有限,不能使用太多的暫存器變數。如果暫存器使用飽和時,程式將暫存器變數自動轉換為自動變數處理;為了提高運算速度,一般會將一些頻繁使用的自動變數定義為暫存器變數,這樣程式盡可能地為它分配暫存器存放,而不用記憶體。
C語言變數型別
c語言變數型別 auto static external static external register auto 區域性變數 auto 變數是用堆疊 stack 方式占用儲存器空間,因此,當執行此區段是,系統會立即為這個變數分配儲存器空間,而程式執行完後,這個堆疊立即被系統收回 在大括號 內宣告...
C語言變數型別
c 語言中常用的變數型別包括以下幾類 區域性變數 自動變數 外部變數 全域性變數 靜態變數和暫存器變數 暫存器變數不常用,因此不做整理 1 區域性變數 區域性變數也稱為自動變數,是在函式內或程式塊內定義的變數,是一種 臨時 的變數,隨著函式 或程式塊 的執行而生成,隨著函式 或程式塊 的退出而消失。...
C語言 變數型別
c語言根據變數作用域的不同,將變數分為區域性變數和全域性變數。1 區域性變數 定義 在函式內部定義的變數,稱為區域性變數。形式引數也屬於區域性變數。作用域 區域性變數只在定義它的函式內部有效,即區域性變數只有在定義它的函式內部使用,其它函式不能使用它。2 全域性變數 定義 在所有函式外部定義的變數,...