C語言變數型別

2021-07-04 08:57:54 字數 2819 閱讀 4989

c 語言中常用的變數型別包括以下幾類: 區域性變數(自動變數)、外部變數(全域性變數)、靜態變數和暫存器變數(暫存器變數不常用,因此不做整理)。

1 區域性變數

區域性變數也稱為自動變數,是在函式內或程式塊內定義的變數,是一種「臨時」的變數,隨著函式(或程式塊)的執行而生成,隨著函式(或程式塊)的退出而消失。區域性變數的作用域僅限於定義它的函式或者程式塊。

例1:在函式內定義的區域性變數

void  function(void)

例2:在程式段內定義的區域性變數

while(1)

2 外部變數

外部變數也稱為全域性變數,是定義於所有函式之外的變數,其作用域是其定義(或宣告)之後的所有函式。函式可以訪問外部變數的前提是在該外部變數的定義(或宣告)在該函式定義或宣告之前。外部變數的定義與普通變數一樣,不同之處是:外部變數只能初始化一次!外部變數通過關鍵字extern宣告。

例3:外部變數定義及使用

int  x = 0;  /* 定義並初始化外部變數x */

void function1(void)

外部變數的乙個常用用法是,在某個檔案中定義並初始化;在其他檔案中通過extern宣告來使用該外部變數。而這一過程通常是通過.c和.h檔案來實現的。這樣做的好處是方便程式**的管理和軟體的模組化。

例4:file1中定義外部變數,file2通過extern宣告使用外部變數

file 1.c:

int  x = 0;   /* 定義並初始化外部變數x */

***************file1.c檔案其他內容*******************

file1.h:

extern  int  x;   /* 宣告外部變數x */

***************file1.h檔案其他內容*******************

file 2.h:

#include 「file1.h」      /* 通過include 包含file1.h */

**********file2.h中其他變數和函式的宣告**************

file 2.c

#include 「file2.h」      /* 通過include 包含file2.h */

由於file2.h中已經頭包含了file1.h,因此file2.c通過頭包含file2.h也就同時頭包含了file1.h,這樣在file2.c檔案中就可以使用file1.c 中定義的外部變數x了。

3 靜態變數

1)      static作用於外部變數

當static作用於外部變數時,將其作用域限定在被編譯原檔案(標頭檔案不會被編譯的,而是在編譯前將其中內容複製到原檔案對應處)的剩餘部分,阻止其他檔案中函式使用該變數。對其他檔案中函式來說,該外部變數似乎不存在。這就起到「隱藏」的作用。

例5:static 宣告靜態外部變數

file1.h:

static  int  x;

file1.c:

static  int  x = 0;

file2.h:

#include 「file1.h」

file2.c:

#include 「file2.h」

該例中,靜態變數x的定義只在file1中,因此雖然file2通過頭包含file1.h對變數x進行了宣告,但不可用,因為x的作用域僅限於定義它的原始檔中。(如果file2.c中也有句「static  int  x = 0;」會怎麼樣?這個問題我也沒考慮清楚,沒有程式設計驗證)

2)      static 作用於區域性變數

當static作用於區域性變數時,將其作用域限定於定義該變數的函式體內。這樣,對於其他函式來說該變數不可用。實際上,區域性變數本身的作用於就是限定在定義它的函式體內的。但是,通過static宣告的區域性變數(靜態區域性變數)與普通區域性變數的區別在於:靜態區域性變數會一直存在,即一直占有儲存空間,而不是像普通區域性變數那樣,隨著函式的呼叫而生成;隨著函式的推出而消失。

3)      static作用於函式

當static作用於函式時,將其作用於限定為被編譯檔案的剩餘部分,而在其他檔案中不可用,起到隱藏該函式的功能。舉例如下:

file1.h:

void  function1(void);

static  void  function2(void);

file1.c:

void  function1(void)

static  void  function2(void)

file2.h:

#include 「file1.h」

file2.c:

#include 「file2.h」

儘管file2通過頭包含已經有了function1和function2的函式宣告,但function2由於是靜態函式,因此只能在file1中使用;而finction1既可以在file1中使用,也可以在file2中使用。

:與靜態全域性變數情況類似,如果file2.c中也有函式定義語句「static  void  function2(void)」,即函式function2既在file1中有定義,也在file2種有定義,或者說即在file1和file2都定義了乙個函式名為function2的函式。那麼結果究竟會怎樣?

如果往底層考慮,即無論是函式還是變數,都是儲存在儲存器某個位置的二進位制數,而其訪問是通過對應儲存位置的位址來訪問的。因此,雖然file1和file2中都有相同名字的變數或者函式,但是編譯後其實是分別為它們分配了不同的儲存位置(即位址不同)的,因此也就無所謂變數名或者函式名相同了,實際上它們是不同的變數(或函式)。

C語言變數型別

c語言變數型別 auto static external static external register auto 區域性變數 auto 變數是用堆疊 stack 方式占用儲存器空間,因此,當執行此區段是,系統會立即為這個變數分配儲存器空間,而程式執行完後,這個堆疊立即被系統收回 在大括號 內宣告...

C語言變數型別

c語言有豐富的資料型別和運算子,因此計算能力非常強大,計算過程中使用的值一般用變數來儲存。變數也是有分型別的,不同型別的變數有不同的儲存型別 不同的生命週期 不同的作用域,c語言也提供了一些關鍵字來設定變數的屬性 比如設定儲存型別 生命週期 1 變數的作用域 c語言根據變數作用域的不同,將變數分為區...

C語言 變數型別

c語言根據變數作用域的不同,將變數分為區域性變數和全域性變數。1 區域性變數 定義 在函式內部定義的變數,稱為區域性變數。形式引數也屬於區域性變數。作用域 區域性變數只在定義它的函式內部有效,即區域性變數只有在定義它的函式內部使用,其它函式不能使用它。2 全域性變數 定義 在所有函式外部定義的變數,...