变量的存储类别
- 局部變量
?? 在一個(gè)函數(shù)內(nèi)定義,只在函數(shù)范圍內(nèi)有效。
??? 在復(fù)合語(yǔ)句中定義,只在符合語(yǔ)句中有效。
??? 隨著函數(shù)調(diào)用的結(jié)束或復(fù)合語(yǔ)句的結(jié)束而消亡。
??? 如果沒(méi)有賦初值,則內(nèi)容為隨機(jī)值。
2.靜態(tài)局部變量static
??作用域:定義的函數(shù)內(nèi)有效。
?? 生命周期:在定義的整個(gè)周期,靜態(tài)局部變量始終從在著,即使退出函數(shù),仍然存在。
? 初值:若未賦以初值,則由系統(tǒng)自動(dòng)賦值;數(shù)值型變量自動(dòng)賦值為0,字符型變量賦空字符。
- 全局變量
1.普通全局變量
? 在函數(shù)外定義,可被本文件及其它文件中的函數(shù)所共用,若其它文件中的函數(shù)調(diào)用此變量,須用extern聲明。
? 生命周期:在程序運(yùn)行的整個(gè)周期都存在。
? 不同文件的全局變量不可重名。
2.?靜態(tài)全局變量static
?? 在函數(shù)外定義,作用范圍被限制在所定義的文件中,即其它文件中的函數(shù)沒(méi)法使用。
? 不同文件靜態(tài)全局變量可重名,但作用域不沖突。
?? 生命周期:整個(gè)程序運(yùn)行的周期。
3.說(shuō)明
? 允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對(duì)象,分配不同的單元,互不干擾。
? 同一源文件中,允許全局變量和局部變量同名,在局部變量的作用域內(nèi),全局變量不起作用。
- const型變量
? ?一個(gè)變量聲明為const變量,意味著該變量是一個(gè)常量,不可被修改。
? const變量在定義的時(shí)候進(jìn)行初始化。
? 在使用過(guò)程中const修飾的變量只能做右值而不能做左值。
? 一般用于修飾一些不想程序中對(duì)其值發(fā)生改變的變量。
- register型變量
? 告訴系統(tǒng)register修飾的變量將被頻繁使用,對(duì)其分配地址時(shí)盡量將其分配在寄存器中,以提高訪問(wèn)速度。
? 這個(gè)修飾詞只是告知CPU盡量將變量分配在寄存器中,不一定真的分配(可能優(yōu)化處理)。
? register變量必須是一個(gè)單個(gè)的值,并且其長(zhǎng)度應(yīng)小于或等于整型的長(zhǎng)度。
? 局部變量和形參可作為register變量,全局變量或靜態(tài)變量不行。
? register變量可能不存放在內(nèi)存中,不能用取地址運(yùn)算符“&”來(lái)獲取register變量的地址,也不能用指針來(lái)操作。
- volatile型變量(易失變量)
? 表示變量是易失的,易變的。
? 強(qiáng)制訪存操作,防止編譯器去優(yōu)化,告訴編譯器每次必須去內(nèi)存中取值,而不是從寄存器或者緩存中取值。
使用情況:
? 并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)。
? 一個(gè)中斷服務(wù)子程序中會(huì)訪問(wèn)到的非自動(dòng)變量(全局變量、靜態(tài)變量)。
? 多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量。
轉(zhuǎn)載于:https://www.cnblogs.com/lemongirl/p/7887333.html
總結(jié)
- 上一篇: 记一次与为知笔记的客服沟通
- 下一篇: 《Linux命令行与shell脚本编程大