日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【转载】C语言变量详解

發(fā)布時(shí)間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】C语言变量详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原鏈接:http://gaga.yo2.cn/articles/detailed-c-language-variables-review.html

?剛做題時(shí)發(fā)現(xiàn)全局變量會自動初始化,如int型則自動初始化為0,double則初始化為0.000000....。而局部變量如果沒有初始化的話,初值為一隨機(jī)數(shù)。于是很好奇,找了點(diǎn)資料,發(fā)現(xiàn)果然如此。

?

一。變量的存儲類型

C語言中的變量存儲類型有4種,分別為auto(自動變量),static(靜態(tài)變量),extern(外部變量),register(寄存器變量)

1.全局變量的存儲類型:

static和extern兩種,其中extern是缺省的全局變量存儲類型

int x,y=5;//默認(rèn)為外部全局變量

extern int a=1,b=2;//定義外部全局變量,使用關(guān)鍵字extern后,必須進(jìn)行初始化!

static float f1,f2;//靜態(tài)全局變量

void main()

{

..........

}

extern型全局變量通過外部全局變量說明可以被其他源程序引用,而static星的全局變量只能局限在本源程序文件中使用

如果使用了關(guān)鍵字extern,則必須對這個(gè)外部全局變量進(jìn)行出示化,否則編譯程序會把它當(dāng)作外部變量的聲明(說明)??????

2.局部變量的存儲類型:

C語言種的局部變量的存儲類型有如下3種:auto,static,register。其中auto是缺省的局部變量存儲類型!

void main()

{

??? auto int a;//自動變量

??? fioat f;//自動變量

??? static int i;//靜態(tài)變量

??? register double d;//寄存器變量,要求編譯器使用CPU寄存器來存儲變量值

}

C語言函數(shù)定義中的形參也是局部變量,形參的默認(rèn)存儲類型是auto,也可以指定形參的存儲類型是register,但不允許指定形參的村塾類型為static!

二。變量的生存期

C語言的變量生存期有2種:全程生存期,動態(tài)生存期。

1.全程生存期

指變量在程序運(yùn)行一開始就被建立,而在程序運(yùn)行結(jié)束后才從內(nèi)存中刪除。

具有全程生存期的變量是全局變量和靜態(tài)變量??

具有全程生存期的變量存儲在程序的靜態(tài)數(shù)據(jù)存儲區(qū)中

2.動態(tài)生存期

指變量在程序運(yùn)行過程中,因需要使用才建立,而使用結(jié)束就被刪除

具有動態(tài)生存期的變量有:局部自動變量,寄存器變量

具有動態(tài)生存期的變量存儲在程序的動態(tài)數(shù)據(jù)區(qū)中

對于復(fù)合語句種定義的auto型的局部變量,每當(dāng)程序運(yùn)行至該語句時(shí),就會在動態(tài)數(shù)據(jù)區(qū)建立這些局部變量的存儲空間,而一旦程序流程離開該復(fù)合語句時(shí),該復(fù)合語句種的局部變量將被系統(tǒng)從內(nèi)存種刪除

3.變量的初始化

具有全局生存期的變量(包括數(shù)組)在定義時(shí)如果沒有初始化,則初值自動為0;而具有動態(tài)生存期的變量未初始化時(shí),初值為一隨機(jī)數(shù)!

??? 具有全局生存期的變量在定義時(shí)如有初始化,則初始化在程序剛開始運(yùn)行建立靜態(tài)數(shù)據(jù)區(qū)時(shí)會被執(zhí)行一次,以后再也不會執(zhí)行初始化操作。而動態(tài)生存期的變量在定義時(shí)如有初始化,則每當(dāng)程序創(chuàng)建該變量時(shí)都會執(zhí)行初始化。

static double a[10];

int b[5];double x,y;static char ch;

void main()

{

???? static long p[8];

???? static float g;

}

上述變量都為全局生存期變量,所以初值都時(shí)0!

注意:如果在函數(shù)中使用靜態(tài)局部變量,由于靜態(tài)局部變量的初始化只執(zhí)行一次,故當(dāng)?shù)?次調(diào)用該函數(shù)時(shí),不會對靜態(tài)局部變量進(jìn)行再次初始化;又由于靜態(tài)局部變量時(shí)全程生存期的,所以靜態(tài)局部變量的值為上次結(jié)束函數(shù)調(diào)用時(shí)的值!

#include "stdio.h"

void f()

{

??? int a =0;//自動局部變量

??? static int c;//靜態(tài)局部變量

??? a++;c++;

??? printf("%d,%d,",a,c)

}

void main()

{

??? int k;

??? for(k=1;k<=4;k++)

??????? f();

}

輸出結(jié)果:1,1,1,2,1,3,1,4

解析:

由于a時(shí)自動變量,即為動態(tài)生存期變量,所以每次調(diào)用函數(shù)f()時(shí)都要進(jìn)行初始化,故每次輸出都時(shí)1。

而b為靜態(tài)局部變量,即為全局生存期變量,所以只是在第一次調(diào)用函數(shù)f()時(shí)進(jìn)行初始化,在接下來函數(shù)f的調(diào)用中

b的值為上次函數(shù)結(jié)束時(shí)的值

?

轉(zhuǎn)載于:https://www.cnblogs.com/zen_chou/archive/2009/05/19/1460227.html

總結(jié)

以上是生活随笔為你收集整理的【转载】C语言变量详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。