三.變量的類型和存儲類別
變量都有類型狸驳,并在內(nèi)存中占有一定的空間
1字節(jié) =8位
1k = 1024字節(jié)
1M = 1024k
1G = 1024M
字節(jié)通常用Byte表示啥供,二進制的每一個0或1是組成二進制的最小單位,稱為位(bit).
基本類型數(shù)據(jù)(語言本身本身就已經(jīng)設(shè)定好的數(shù)據(jù)類型供編程使用)
整形
整形 --int 4個字節(jié)
短整形 -- short int? ? 2個字節(jié)
長整型 --long int 8個字節(jié)
浮點數(shù)【實數(shù)】
單精度 --float --4個字節(jié)
雙精度 --double --8個字節(jié) (雙精度運算特別費時>恪!G妇)
(即使定義為浮點型千元,進行運算時,若運算式子中蔓姚,常量都為整形捕虽,得出結(jié)果也為整形)
字符? ? char? 1個字節(jié)(字符的本質(zhì)實際上與整數(shù)的存儲方式相同)
sizeof(i)結(jié)果為定義變量i的數(shù)據(jù)類型所占的字節(jié)長度。
類型轉(zhuǎn)換:自動轉(zhuǎn)換是把比較窄的操作數(shù)轉(zhuǎn)換為比較寬的操作數(shù)坡脐,不丟失信息的轉(zhuǎn)換薯鳍。
針對可能出現(xiàn)信息丟失的表達式,編譯器可能給出警告信息挨措,如把較長的整形值賦給較短的整形變量挖滤,把浮點數(shù)賦值給整形變量,等等浅役,但這些表示并不非法
c語言沒有指定char類型的變量是無符號數(shù)(unsigned)還是有符號數(shù)(signed)斩松,當把一個char類型轉(zhuǎn)換為int時,其結(jié)果在不同的機器上不同觉既,可能為正惧盹,可能為負乳幸,這反映了不同機器結(jié)構(gòu)之間的區(qū)別。
某些機器上钧椰,如果char類型值最左一位為1粹断,則轉(zhuǎn)換為負整數(shù)(進行符號擴展),在某些機器上嫡霞,char類型值左邊填0瓶埋,則結(jié)果為正
將字符型轉(zhuǎn)換為整形時,注意:
不允許使用無意義的表達式诊沪,如1.把flaot類型的表達式作為下標养筒,
2.%只能對整形,
變量的存儲類別:1.靜態(tài)存儲區(qū):存儲全局變量端姚,靜態(tài)存儲變量
2.動態(tài)存儲區(qū):函數(shù)的形參晕粪,局部變量,現(xiàn)場保護數(shù)據(jù)
在C語言中渐裸,變量和函數(shù)有數(shù)據(jù)類型和數(shù)據(jù)存儲類別
數(shù)據(jù)類型:int ,char, float ,double
存儲類別:auto static register extern
自動變量如果沒有賦初值巫湘,其存儲單元中將是隨機值。?
就靜態(tài)變量而言昏鹃,如果定義時沒有賦初值剩膘,系統(tǒng)將自動賦0。
賦初值只在函數(shù)第一次調(diào)用時起作用盆顾,以后調(diào)用都按前一次調(diào)用保留的值使用
全局變量:在函數(shù)外定義,可在本文件所有函數(shù)公用
有效范圍:從定義變量位置開始到本源文件結(jié)束畏梆,若有外部變量說明
(extern 數(shù)據(jù)類型 變量名)您宪,則從此說明到結(jié)束
若外部變量與局部變量同名,則外部變量被屏蔽奠涌,或者稱為被覆蓋宪巨。
全局變量的不利:1.占用存儲單元,
2.降低了函數(shù)的通用性溜畅,可靠性捏卓,移植性
3降低了程序清晰性,易出錯
寄存器變量:寄存器變量以寄存器為存儲單元慈格,不必訪問內(nèi)存怠晴,存取速度極快。
定義:register int a,b;? (在函數(shù)內(nèi)定義)
作用域:在函數(shù)內(nèi)有用
生存期:出函數(shù)之后浴捆,變量消失
注:只能定義2-3個寄存器變量
寄存器變量只能是char蒜田,int,或指針形
類型轉(zhuǎn)換:
自動轉(zhuǎn)換是把比較窄的操作數(shù)轉(zhuǎn)換為比較寬的操作數(shù)选泻,并且不丟失信息的轉(zhuǎn)換了冲粤。
針對可能導致信息丟失的表達式美莫,編譯器會給出警告,但不非法梯捕,如“:
把較長的整形數(shù)值賦給較短的整形變量厢呵,把浮點型賦給整形
二元運算符(具有兩個操作數(shù)的運算符)的兩個操作數(shù)如果具有不同類型,那么在進行運算之前傀顾,先把較低的轉(zhuǎn)換為較較高的
例子一:C語言沒有指定char類型的變量是無符號變量還是帶符號變量襟铭,當把char類型轉(zhuǎn)換為int類型時,不同電腦可能有兩種答案锣笨,為了保證程序的可移植性蝌矛,定義時最好規(guī)定signed 或unsigned
當把較長的整數(shù)轉(zhuǎn)換為較短的整數(shù)或char類型時,超出的高位將被丟棄
例子二:int i ;? ? char c;? ? i=c;? ?c=i;? ? ? ? ? ? ?執(zhí)行后错英,c的值不會改變.