c語言變量詳解(1)



一、變量的三大特點:

      變量的數據類型:主要說明變量佔用內存空間大小 如 int型。

      變量的作用域:變量的有效性的範圍,即:變量的使用範圍。

      變量的存儲類型:變量在內存中的存儲方式。不同的存儲方式,影響變量在內存中的生存週期。

二:變量的數據類型:

      變量的數據類型有:int,float,double,char 等詳細請看其他資料。

三:變量的作用域:

      1、局部變量:

            1.1、定義:在一個函數內部或某個複合語句內部定義的變量稱爲局部變量。

1.2:特點:使用範圍是定義它的函數或複合語句。

1.2.1:局部變量被放在動態存儲區中,編譯時候系統不爲其分配存儲單元,在程序運行到局部變量所在的函數時才爲其分配內存單元。調用結束時,內存單元被釋放。即變量的生存期是函數的調用時間。

1.2.2:局部變量在不同的函數可以同名。只要作用域不同他們不會衝突。如果變量名相同,則當前局部變量優先。

 

      2、全局變量:
           2.1、定義:在所有函數外部(當然也在main函數外部)定義的變量稱爲全局變量。

           2.2、特點:全局變量的作用域從定義變量的位置開始到源程序結束,並且默認初始值爲0。

           2.2、全局變量存放在靜態存儲區中,在編譯時給全局變量分配內存單元,直到程序運行結束變量才被釋放。全局變量的生存期爲整個程序運行期間。

2.3、若全局變量與局部變量同名局部變量在定義它的函數內優先。

2.4、如果要在定義之前使用局部變量,用extern加以聲明可擴展全局變量的作用域。

四、變量的存儲方式:

1. 變量的存儲方式共有兩種:靜態存儲和動態存儲。

           2. 變量的存儲方式由變量的作用域和變量的存儲類型共同決定、能僅從作用域上判斷。

 

 

C存儲類型共有四種:

1、         auto:自動變量  (編譯器默認類型,簡稱系統默認)

2、         register:寄存器變量

3、         static:靜態類型

4、         extern:外部類型

 

auto類型詳解:

如果未加類型存儲類型說明默認爲 auto類型

1.例子:int a=4; <=>  auto int a=4;  (<=>等價符號)。

2.形參變量屬於自動變量。

3.自動變量屬於局部變量。

register 類型詳解:

      寄存器類型跟普通類型區別:寄存器類型變量存放在CPU的寄存器中,速度比存放在內存中的變量操作速度快。一般將反覆多次使用的變量放到寄存器中,以提高程序的運行速度。

static 類型變量

一、        靜態類型變量屬於靜態存儲方式。屬於靜態存儲方式的不一定是靜態類型變量。如外部變量。

二、        靜態變量分爲兩種:靜態局部變量和靜態全局變量。

 

1:靜態局部變量:在局部變量前加上存儲類型說明符

static 就構成了靜態局部變量。

1.1:靜態局部變量與局部變量的區別:

1.1.1靜態局部屬於靜態存儲方式,局部變量屬於動態存儲方式。

1.1.2:定義域相同,僅限與定義他的函數,當函數調用結束後自動類型變量的值消失,而靜態局部變量的值會一直在內存中,只是外部不能調用。當再次調用這個函數,靜態變量的值繼續有效並且等於上次調用結束的值。

例如:

Void TestStatic ()

{

static int i=0;

i ;

printf(“%d”,i);

 

}

Main()

{

TestStatic () //結果是打印出 數字 1

TestStatic ()// 第二次調用結果打印出 2

//靜態變量的第二次調用 不執行 static int i=0; 這一句。

}

 

1.1.3 生存期的區別:靜態局部變量的生存期是整個程序運行期間,動態局部變量的生存期是函數調用結束。

1.1.4、系統自動爲靜態局部變量賦初始值 0,而自動變量的初值不確定。

 

靜態全局變量

 

2:靜態全局變量:

在全局變量前加上存儲類型說明 static 就構成了靜態全局變量。

2.1、靜態全局變量與全局變量的區別:全局變量的作用域是整個程序。而靜態變量的作用域是定義該變量的源文件。

 

總結:static 作用於局部變量改變了 局部變量的生存期。作用域全局變量改變了全局變量的使用範圍。

 

 

 

Extern 類型變量詳解:

一、  extern類型定義:
外部類型是定義在所有函數之外的全局變量、在編譯時候系統分配給其永久的存儲空間

二、  特點:

1.          外部變量與靜態變量一樣,系統自動爲未初始化的的變量賦予0值。

2.         外部變量與全局變量一樣,作用域爲從定義到整個源程序結束

3.         外部變量可以被其他文件使用,如只限定在本文件使用加static限定符。

例如: 有文件 a.c和文件b.c  在b.c中定義外部變量 int cctwl=520;

a.c 文件內容如下:

main()

{

Extern int cctwl;//聲明外部變量,編譯器會自動找到 b.c中的 變量cctwl。

Printf(“%d”,cctwl);//結果520。

}

外部變量調用前 必須用 extern聲明 而外部函數的聲明可以省略 extern 直接寫出函數原型就可。系統默認加上 extern。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章