溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

儲(chǔ)存類生命周期鏈接屬性作用域總結(jié)

發(fā)布時(shí)間:2020-07-31 01:16:48 來(lái)源:網(wǎng)絡(luò) 閱讀:463 作者:廚房的貓 欄目:編程語(yǔ)言

儲(chǔ)存類:變量在定義時(shí)的儲(chǔ)存類型對(duì)其在程序中的生命周期、連接屬性及作用域有很大的關(guān)聯(lián)
鏈接屬性: 無(wú)連接、內(nèi)連接、外鏈接
關(guān)鍵字:
1、auto    用于修飾局部變量,在定義局部變量時(shí),將其定義在棧上。
普通局部變量存放在棧上,因?yàn)闂?nèi)存的特性決定了普通局部變量定時(shí)如果未初始化其的值是隨機(jī)的,因?yàn)闂?nèi)存是臟的,變量在釋放后并未對(duì)其初始化,且棧內(nèi)存被廣泛運(yùn)用,也就造就了普通變量的特性。
普通局部變量的生命周期是臨時(shí),可從其存放于棧上看出其臨時(shí)的特性。
普通局部變量的作用域?yàn)榇a塊中“{}",C89與C99略有不同,普通局部變量在代碼塊的首部被定義,在代碼塊中被運(yùn)用,在代碼塊結(jié)尾處被釋放。

2、static    該關(guān)鍵字有兩種作用,1、用于修飾靜態(tài)局部變量 2、用于修飾全局變量或者函數(shù),
且這兩種作用之間無(wú)任何的相關(guān)性,相互獨(dú)立的存在。
static修飾的局部變量為靜態(tài)局部變量,其與普通局部變量不同,并不存放在棧上,而是存放在數(shù)據(jù)段/bss段(顯式初始化為非0則在數(shù)據(jù)段,顯式初始化為0或未顯示初始化則在bss段)上,同樣的因其存放在數(shù)據(jù)段上也就決定了其的生命周期并不是臨時(shí)的而是永久的。但靜態(tài)局部變量與普通局部變量也存在相似性,靜態(tài)局部變量的作用域仍為代碼塊,且其連接屬性依舊為無(wú)連接。
static修飾的全部變量/函數(shù)為靜態(tài)全局變量/函數(shù),其作用域的文件范圍,生命周期為永久,連接屬性因其只能在自身的文件內(nèi)部被調(diào)用所以連接屬性為內(nèi)連接。

3、register  該關(guān)鍵字修飾的變量分配于寄存器中,降存放于寄存器中的變量可大大提高讀取速度,但寄存器是有限的,
且經(jīng)常性的被系統(tǒng)本身使用,故謹(jǐn)慎使用該關(guān)鍵字。

4、extern  該關(guān)鍵字用來(lái)全局聲明變量/函數(shù),聲明后的全局變量及函數(shù)可在別的文件中被調(diào)用(前提是包含了該文件的.h文件),
作用域變更為全文件,鏈接屬性為外鏈接。

5、volatile 其意思為可變的,在C語(yǔ)言中定義變量時(shí)加上該關(guān)鍵字,即可告訴編譯器該變量可被編譯器以外的代碼改變,編譯器之內(nèi)的意思是變量的值的改變是代碼的作用,編譯器之外的改變就是這個(gè)改變不是代碼造成的,或者不是當(dāng)前代碼造成的,編譯器在編譯當(dāng)前代碼時(shí)無(wú)法預(yù)知。譬如在中斷中對(duì)變量的操作就必須加上該關(guān)鍵字,防止編譯器對(duì)代碼進(jìn)行了錯(cuò)誤的優(yōu)化。

6、restrict  restrict只用來(lái)修飾指針,不能修飾普通變量。

7、typedef  

存儲(chǔ)類決定生命周期,作用域決定鏈接屬性
宏和inline函數(shù)的鏈接屬性為無(wú)連接。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c
AI