【转载】C语言变量详解
原鏈接:http://gaga.yo2.cn/articles/detailed-c-language-variables-review.html
?剛做題時發現全局變量會自動初始化,如int型則自動初始化為0,double則初始化為0.000000....。而局部變量如果沒有初始化的話,初值為一隨機數。于是很好奇,找了點資料,發現果然如此。
?
一。變量的存儲類型
C語言中的變量存儲類型有4種,分別為auto(自動變量),static(靜態變量),extern(外部變量),register(寄存器變量)
1.全局變量的存儲類型:
static和extern兩種,其中extern是缺省的全局變量存儲類型。
int x,y=5;//默認為外部全局變量
extern int a=1,b=2;//定義外部全局變量,使用關鍵字extern后,必須進行初始化!
static float f1,f2;//靜態全局變量
void main()
{
..........
}
extern型全局變量通過外部全局變量說明可以被其他源程序引用,而static星的全局變量只能局限在本源程序文件中使用
如果使用了關鍵字extern,則必須對這個外部全局變量進行出示化,否則編譯程序會把它當作外部變量的聲明(說明)??????
2.局部變量的存儲類型:
C語言種的局部變量的存儲類型有如下3種:auto,static,register。其中auto是缺省的局部變量存儲類型!
void main()
{
??? auto int a;//自動變量
??? fioat f;//自動變量
??? static int i;//靜態變量
??? register double d;//寄存器變量,要求編譯器使用CPU寄存器來存儲變量值
}
C語言函數定義中的形參也是局部變量,形參的默認存儲類型是auto,也可以指定形參的存儲類型是register,但不允許指定形參的村塾類型為static!
二。變量的生存期
C語言的變量生存期有2種:全程生存期,動態生存期。
1.全程生存期
指變量在程序運行一開始就被建立,而在程序運行結束后才從內存中刪除。
具有全程生存期的變量是全局變量和靜態變量??
具有全程生存期的變量存儲在程序的靜態數據存儲區中
2.動態生存期
指變量在程序運行過程中,因需要使用才建立,而使用結束就被刪除
具有動態生存期的變量有:局部自動變量,寄存器變量
具有動態生存期的變量存儲在程序的動態數據區中
對于復合語句種定義的auto型的局部變量,每當程序運行至該語句時,就會在動態數據區建立這些局部變量的存儲空間,而一旦程序流程離開該復合語句時,該復合語句種的局部變量將被系統從內存種刪除
3.變量的初始化
具有全局生存期的變量(包括數組)在定義時如果沒有初始化,則初值自動為0;而具有動態生存期的變量未初始化時,初值為一隨機數!
??? 具有全局生存期的變量在定義時如有初始化,則初始化在程序剛開始運行建立靜態數據區時會被執行一次,以后再也不會執行初始化操作。而動態生存期的變量在定義時如有初始化,則每當程序創建該變量時都會執行初始化。
static double a[10];
int b[5];double x,y;static char ch;
void main()
{
???? static long p[8];
???? static float g;
}
上述變量都為全局生存期變量,所以初值都時0!
注意:如果在函數中使用靜態局部變量,由于靜態局部變量的初始化只執行一次,故當第2次調用該函數時,不會對靜態局部變量進行再次初始化;又由于靜態局部變量時全程生存期的,所以靜態局部變量的值為上次結束函數調用時的值!
#include "stdio.h"
void f()
{
??? int a =0;//自動局部變量
??? static int c;//靜態局部變量
??? a++;c++;
??? printf("%d,%d,",a,c)
}
void main()
{
??? int k;
??? for(k=1;k<=4;k++)
??????? f();
}
輸出結果:1,1,1,2,1,3,1,4
解析:
由于a時自動變量,即為動態生存期變量,所以每次調用函數f()時都要進行初始化,故每次輸出都時1。
而b為靜態局部變量,即為全局生存期變量,所以只是在第一次調用函數f()時進行初始化,在接下來函數f的調用中
b的值為上次函數結束時的值
?
轉載于:https://www.cnblogs.com/zen_chou/archive/2009/05/19/1460227.html
總結
以上是生活随笔為你收集整理的【转载】C语言变量详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摩尔庄园手游霜天红叶怎么获得?
- 下一篇: 示字开头的四字成语有哪些?