課程
/后端開發(fā)
/C
/C語言入門
幾種類別的區(qū)別,完全看不懂。
2018-07-03
源自:C語言入門 5-11
正在回答
auto自定義變量,默認(rèn)的
register寄存器變量,是形參和自動(dòng)變量,靜態(tài)局部變量不能定義為寄存器變量
extern外部變量,我覺得就是全局變量
static靜態(tài)變量,在局部靜態(tài)變量中,該變量只能賦值一次,而且不釋放(下一次調(diào)用,變量的值為上一次結(jié)束時(shí)的值)
自動(dòng)型變量(以下內(nèi)容均來自百度)定義一個(gè)內(nèi)部變量時(shí),如果將auto加在定義語句前面,則該變量是自動(dòng)型變量;定義內(nèi)部變量時(shí),如果沒有加任何存儲(chǔ)類型限定,該變量默認(rèn)為自動(dòng)型變量。auto只能修飾內(nèi)部變量,不能修飾外部變量。也就是說只有內(nèi)部變量可以定義為自動(dòng)型變量,外部變量不能定義為自動(dòng)型變量。事實(shí)上,auto沒有什么實(shí)際用處。內(nèi)部變量已經(jīng)默認(rèn)為自動(dòng)型變量。2.靜態(tài)型變量外部變量和內(nèi)部變量都可以定義為靜態(tài)型變量。如果在定義一個(gè)內(nèi)部變量時(shí),在定義語句最前面加上static存儲(chǔ)類型限定詞,那么該變量將是一個(gè)靜態(tài)型變量。該變量將在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。這種變量作用域雖然只在函數(shù)內(nèi)部,但是該變量將一直在靜態(tài)數(shù)據(jù)區(qū)占據(jù)存儲(chǔ)空間,直到程序運(yùn)行結(jié)束。定義外部變量時(shí),如果不加存儲(chǔ)類型限定詞,它將在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。它的作用域除了本文件以外,其他文件通過extern語句聲明后也可訪問。但是,如果在定義一個(gè)外部變量時(shí),加上static限定詞,其作用域?qū)⒆冋?,該變量只在本文件中可見,在其他文件中將不可見,此時(shí)在其他文件中即使用extern聲明也不能擴(kuò)展其作用域。這是一個(gè)外部靜態(tài)型變量,也在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。注意:對(duì)于函數(shù)的作用域也是這樣,如果在函數(shù)定義時(shí)加上了static限定詞,那么該函數(shù)也只在其定義文件內(nèi)可見(“可見”的意思就是在在該范圍內(nèi)可以使用)。在其他文件中即使聲明了也不可以調(diào)用。另外,對(duì)于函數(shù)聲明而言可以省略extern關(guān)鍵字。一個(gè)文件中加了static的同名外部變量將隱藏其他文件中定義的未加static的外部變量。也就是說,static變量能夠屏蔽其他文件中的同名外部變量,這功能有點(diǎn)像函數(shù)的內(nèi)部變量能夠屏蔽同名的外部變量一樣。但是,不同文件中如具有未加static的多個(gè)同名外部變量則是非法的。static限定詞常用于外部變量,也可用于函數(shù)。正常情況下,函數(shù)名字是全局的,對(duì)程序的任何部分都是可見的。如果在定義一個(gè)函數(shù)時(shí)用static限定,該函數(shù)將在其定義文件以外不可見。static限定詞同樣能夠應(yīng)用于內(nèi)部變量。此時(shí),該變量將是一個(gè)內(nèi)部靜態(tài)型變量。內(nèi)部靜態(tài)型變量就像自動(dòng)變量一樣是屬于某個(gè)特定函數(shù)的內(nèi)部變量。但是,同自動(dòng)型變量不同,它們一直在內(nèi)存中存在,而不是隨著函數(shù)的每次調(diào)用而存在,隨著函數(shù)調(diào)用結(jié)束而消失。這意味著內(nèi)部靜態(tài)型變量提供了單個(gè)函數(shù)內(nèi)部私有的、持久的存儲(chǔ)。也就是說內(nèi)部靜態(tài)型變量只在函數(shù)被調(diào)用時(shí)起作用,但是它將在程序的整個(gè)運(yùn)行時(shí)間內(nèi)一直占據(jù)內(nèi)存空間。3.寄存器型變量register限定詞通知編譯器--程序中的變量將頻繁使用。它的意思是建議編譯器將程序中用register限定的變量放置在計(jì)算機(jī)的內(nèi)部寄存其中,這樣可能得到更小更快的程序。但是,編譯器將根據(jù)實(shí)際情況考慮是否采納該建議--是否將register變量處理為寄存器變量最終決定權(quán)還是在編譯器。如下使用register:register int x;/*x必須是內(nèi)部變量*/register char ch;/*ch必須是內(nèi)部變量*/register只能用于限定自動(dòng)型變量和函數(shù)的形式參數(shù)。也就是說register只對(duì)內(nèi)部變量起作用,而且只能限定內(nèi)部非靜態(tài)型變量,不能限定內(nèi)部靜態(tài)型變量。register也可以應(yīng)用于形式參數(shù),格式如下:f(register unsigned m,register long n) /*register應(yīng)用于形式參數(shù)*/{ ? ? register int i; /* register應(yīng)用于內(nèi)部變量*/}在傳統(tǒng)C中,register變量的使用有諸多限制,它決定于硬件的實(shí)現(xiàn)方式。在每一個(gè)函數(shù)中只有少數(shù)幾個(gè)變量可以保存在寄存器中,而且也只有特定的類型才行。過量的register變量看起來是無害的,但是超量以后,編譯器將忽略新的register變量。另外不管register變量實(shí)際上是否被編譯器設(shè)置為寄存器型變量,都不可能取得該變量的地址。寄存器型變量的類型和數(shù)量的多少隨計(jì)算機(jī)不同而異。register變量一般只能夠設(shè)置幾個(gè)。傳統(tǒng)C的register類型限定于char、int等類型。像float、double、數(shù)組等是不可以設(shè)定為register型變量的。但是,在最新C99標(biāo)準(zhǔn)中,任何類型都可以定義為register變量,register聲明的目的只是告訴編譯器以盡快的速度處理該變量,編譯器不見得非把它處理為register變量。4.外部型變量如extern用于變量定義語句前面,那么該語句就只能是一個(gè)聲明語句了,他不再是一個(gè)變量定義語句。它僅僅是一個(gè)聲明--聲明該變量已經(jīng)在別的地方定義,只是告訴編譯器該變量的類型。extern int sp;/* sp在別的地方定義,并分配存儲(chǔ)單元,本語句只是聲明它已經(jīng)定義過*/該語句聲明了sp在別的地方已經(jīng)定義,并分配了存儲(chǔ)空間,本語句只是說明sp已經(jīng)定義過的類型為int,并不再為它分配內(nèi)存空間。這樣聲明以后,在本文件余下部分就可以使用sp了。1.自動(dòng)型變量定義一個(gè)內(nèi)部變量時(shí),如果將auto加在定義語句前面,則該變量是自動(dòng)型變量;定義內(nèi)部變量時(shí),如果沒有加任何存儲(chǔ)類型限定,該變量默認(rèn)為自動(dòng)型變量。auto只能修飾內(nèi)部變量,不能修飾外部變量。也就是說只有內(nèi)部變量可以定義為自動(dòng)型變量,外部變量不能定義為自動(dòng)型變量。事實(shí)上,auto沒有什么實(shí)際用處。內(nèi)部變量已經(jīng)默認(rèn)為自動(dòng)型變量。2.靜態(tài)型變量外部變量和內(nèi)部變量都可以定義為靜態(tài)型變量。如果在定義一個(gè)內(nèi)部變量時(shí),在定義語句最前面加上static存儲(chǔ)類型限定詞,那么該變量將是一個(gè)靜態(tài)型變量。該變量將在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。這種變量作用域雖然只在函數(shù)內(nèi)部,但是該變量將一直在靜態(tài)數(shù)據(jù)區(qū)占據(jù)存儲(chǔ)空間,直到程序運(yùn)行結(jié)束。定義外部變量時(shí),如果不加存儲(chǔ)類型限定詞,它將在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。它的作用域除了本文件以外,其他文件通過extern語句聲明后也可訪問。但是,如果在定義一個(gè)外部變量時(shí),加上static限定詞,其作用域?qū)⒆冋?,該變量只在本文件中可見,在其他文件中將不可見,此時(shí)在其他文件中即使用extern聲明也不能擴(kuò)展其作用域。這是一個(gè)外部靜態(tài)型變量,也在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。注意:對(duì)于函數(shù)的作用域也是這樣,如果在函數(shù)定義時(shí)加上了static限定詞,那么該函數(shù)也只在其定義文件內(nèi)可見(“可見”的意思就是在在該范圍內(nèi)可以使用)。在其他文件中即使聲明了也不可以調(diào)用。另外,對(duì)于函數(shù)聲明而言可以省略extern關(guān)鍵字。一個(gè)文件中加了static的同名外部變量將隱藏其他文件中定義的未加static的外部變量。也就是說,static變量能夠屏蔽其他文件中的同名外部變量,這功能有點(diǎn)像函數(shù)的內(nèi)部變量能夠屏蔽同名的外部變量一樣。但是,不同文件中如具有未加static的多個(gè)同名外部變量則是非法的。static限定詞常用于外部變量,也可用于函數(shù)。正常情況下,函數(shù)名字是全局的,對(duì)程序的任何部分都是可見的。如果在定義一個(gè)函數(shù)時(shí)用static限定,該函數(shù)將在其定義文件以外不可見。static限定詞同樣能夠應(yīng)用于內(nèi)部變量。此時(shí),該變量將是一個(gè)內(nèi)部靜態(tài)型變量。內(nèi)部靜態(tài)型變量就像自動(dòng)變量一樣是屬于某個(gè)特定函數(shù)的內(nèi)部變量。但是,同自動(dòng)型變量不同,它們一直在內(nèi)存中存在,而不是隨著函數(shù)的每次調(diào)用而存在,隨著函數(shù)調(diào)用結(jié)束而消失。這意味著內(nèi)部靜態(tài)型變量提供了單個(gè)函數(shù)內(nèi)部私有的、持久的存儲(chǔ)。也就是說內(nèi)部靜態(tài)型變量只在函數(shù)被調(diào)用時(shí)起作用,但是它將在程序的整個(gè)運(yùn)行時(shí)間內(nèi)一直占據(jù)內(nèi)存空間。3.寄存器型變量register限定詞通知編譯器--程序中的變量將頻繁使用。它的意思是建議編譯器將程序中用register限定的變量放置在計(jì)算機(jī)的內(nèi)部寄存其中,這樣可能得到更小更快的程序。但是,編譯器將根據(jù)實(shí)際情況考慮是否采納該建議--是否將register變量處理為寄存器變量最終決定權(quán)還是在編譯器。如下使用register:register int x;/*x必須是內(nèi)部變量*/register char ch;/*ch必須是內(nèi)部變量*/register只能用于限定自動(dòng)型變量和函數(shù)的形式參數(shù)。也就是說register只對(duì)內(nèi)部變量起作用,而且只能限定內(nèi)部非靜態(tài)型變量,不能限定內(nèi)部靜態(tài)型變量。register也可以應(yīng)用于形式參數(shù),格式如下:f(register unsigned m,register long n) /*register應(yīng)用于形式參數(shù)*/{ ? ? register int i; /* register應(yīng)用于內(nèi)部變量*/}在傳統(tǒng)C中,register變量的使用有諸多限制,它決定于硬件的實(shí)現(xiàn)方式。在每一個(gè)函數(shù)中只有少數(shù)幾個(gè)變量可以保存在寄存器中,而且也只有特定的類型才行。過量的register變量看起來是無害的,但是超量以后,編譯器將忽略新的register變量。另外不管register變量實(shí)際上是否被編譯器設(shè)置為寄存器型變量,都不可能取得該變量的地址。寄存器型變量的類型和數(shù)量的多少隨計(jì)算機(jī)不同而異。register變量一般只能夠設(shè)置幾個(gè)。傳統(tǒng)C的register類型限定于char、int等類型。像float、double、數(shù)組等是不可以設(shè)定為register型變量的。但是,在最新C99標(biāo)準(zhǔn)中,任何類型都可以定義為register變量,register聲明的目的只是告訴編譯器以盡快的速度處理該變量,編譯器不見得非把它處理為register變量。4.外部型變量如extern用于變量定義語句前面,那么該語句就只能是一個(gè)聲明語句了,他不再是一個(gè)變量定義語句。它僅僅是一個(gè)聲明--聲明該變量已經(jīng)在別的地方定義,只是告訴編譯器該變量的類型。extern int sp;/* sp在別的地方定義,并分配存儲(chǔ)單元,本語句只是聲明它已經(jīng)定義過*/該語句聲明了sp在別的地方已經(jīng)定義,并分配了存儲(chǔ)空間,本語句只是說明sp已經(jīng)定義過的類型為int,并不再為它分配內(nèi)存空間。這樣聲明以后,在本文件余下部分就可以使用sp了。
舉報(bào)
C語言入門視頻教程,帶你進(jìn)入編程世界的必修課-C語言
3 回答變量存儲(chǔ)類別
1 回答變量存儲(chǔ)類別
2 回答變量存儲(chǔ)類別
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2018-07-09
auto自定義變量,默認(rèn)的
register寄存器變量,是形參和自動(dòng)變量,靜態(tài)局部變量不能定義為寄存器變量
extern外部變量,我覺得就是全局變量
static靜態(tài)變量,在局部靜態(tài)變量中,該變量只能賦值一次,而且不釋放(下一次調(diào)用,變量的值為上一次結(jié)束時(shí)的值)
2018-07-08
自動(dòng)型變量(以下內(nèi)容均來自百度)
定義一個(gè)內(nèi)部變量時(shí),如果將auto加在定義語句前面,則該變量是自動(dòng)型變量;定義內(nèi)部變量時(shí),如果沒有加任何存儲(chǔ)類型限定,該變量默認(rèn)為自動(dòng)型變量。
auto只能修飾內(nèi)部變量,不能修飾外部變量。也就是說只有內(nèi)部變量可以定義為自動(dòng)型變量,外部變量不能定義為自動(dòng)型變量。
事實(shí)上,auto沒有什么實(shí)際用處。內(nèi)部變量已經(jīng)默認(rèn)為自動(dòng)型變量。
2.靜態(tài)型變量
外部變量和內(nèi)部變量都可以定義為靜態(tài)型變量。
如果在定義一個(gè)內(nèi)部變量時(shí),在定義語句最前面加上static存儲(chǔ)類型限定詞,那么該變量將是一個(gè)靜態(tài)型變量。該變量將在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。這種變量作用域雖然只在函數(shù)內(nèi)部,但是該變量將一直在靜態(tài)數(shù)據(jù)區(qū)占據(jù)存儲(chǔ)空間,直到程序運(yùn)行結(jié)束。
定義外部變量時(shí),如果不加存儲(chǔ)類型限定詞,它將在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。它的作用域除了本文件以外,其他文件通過extern語句聲明后也可訪問。
但是,如果在定義一個(gè)外部變量時(shí),加上static限定詞,其作用域?qū)⒆冋?,該變量只在本文件中可見,在其他文件中將不可見,此時(shí)在其他文件中即使用extern聲明也不能擴(kuò)展其作用域。這是一個(gè)外部靜態(tài)型變量,也在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。
注意:對(duì)于函數(shù)的作用域也是這樣,如果在函數(shù)定義時(shí)加上了static限定詞,那么該函數(shù)也只在其定義文件內(nèi)可見(“可見”的意思就是在在該范圍內(nèi)可以使用)。在其他文件中即使聲明了也不可以調(diào)用。另外,對(duì)于函數(shù)聲明而言可以省略extern關(guān)鍵字。
一個(gè)文件中加了static的同名外部變量將隱藏其他文件中定義的未加static的外部變量。也就是說,static變量能夠屏蔽其他文件中的同名外部變量,這功能有點(diǎn)像函數(shù)的內(nèi)部變量能夠屏蔽同名的外部變量一樣。但是,不同文件中如具有未加static的多個(gè)同名外部變量則是非法的。
static限定詞常用于外部變量,也可用于函數(shù)。正常情況下,函數(shù)名字是全局的,對(duì)程序的任何部分都是可見的。如果在定義一個(gè)函數(shù)時(shí)用static限定,該函數(shù)將在其定義文件以外不可見。
static限定詞同樣能夠應(yīng)用于內(nèi)部變量。此時(shí),該變量將是一個(gè)內(nèi)部靜態(tài)型變量。內(nèi)部靜態(tài)型變量就像自動(dòng)變量一樣是屬于某個(gè)特定函數(shù)的內(nèi)部變量。但是,同自動(dòng)型變量不同,它們一直在內(nèi)存中存在,而不是隨著函數(shù)的每次調(diào)用而存在,隨著函數(shù)調(diào)用結(jié)束而消失。這意味著內(nèi)部靜態(tài)型變量提供了單個(gè)函數(shù)內(nèi)部私有的、持久的存儲(chǔ)。也就是說內(nèi)部靜態(tài)型變量只在函數(shù)被調(diào)用時(shí)起作用,但是它將在程序的整個(gè)運(yùn)行時(shí)間內(nèi)一直占據(jù)內(nèi)存空間。
3.寄存器型變量
register限定詞通知編譯器--程序中的變量將頻繁使用。它的意思是建議編譯器將程序中用register限定的變量放置在計(jì)算機(jī)的內(nèi)部寄存其中,這樣可能得到更小更快的程序。但是,編譯器將根據(jù)實(shí)際情況考慮是否采納該建議--是否將register變量處理為寄存器變量最終決定權(quán)還是在編譯器。
如下使用register:
register int x;/*x必須是內(nèi)部變量*/
register char ch;/*ch必須是內(nèi)部變量*/
register只能用于限定自動(dòng)型變量和函數(shù)的形式參數(shù)。也就是說register只對(duì)內(nèi)部變量起作用,而且只能限定內(nèi)部非靜態(tài)型變量,不能限定內(nèi)部靜態(tài)型變量。
register也可以應(yīng)用于形式參數(shù),格式如下:
f(register unsigned m,register long n) /*register應(yīng)用于形式參數(shù)*/
{
? ? register int i; /* register應(yīng)用于內(nèi)部變量*/
}
在傳統(tǒng)C中,register變量的使用有諸多限制,它決定于硬件的實(shí)現(xiàn)方式。在每一個(gè)函數(shù)中只有少數(shù)幾個(gè)變量可以保存在寄存器中,而且也只有特定的類型才行。過量的register變量看起來是無害的,但是超量以后,編譯器將忽略新的register變量。另外不管register變量實(shí)際上是否被編譯器設(shè)置為寄存器型變量,都不可能取得該變量的地址。寄存器型變量的類型和數(shù)量的多少隨計(jì)算機(jī)不同而異。register變量一般只能夠設(shè)置幾個(gè)。傳統(tǒng)C的register類型限定于char、int等類型。像float、double、數(shù)組等是不可以設(shè)定為register型變量的。但是,在最新C99標(biāo)準(zhǔn)中,任何類型都可以定義為register變量,register聲明的目的只是告訴編譯器以盡快的速度處理該變量,編譯器不見得非把它處理為register變量。
4.外部型變量
如extern用于變量定義語句前面,那么該語句就只能是一個(gè)聲明語句了,他不再是一個(gè)變量定義語句。它僅僅是一個(gè)聲明--聲明該變量已經(jīng)在別的地方定義,只是告訴編譯器該變量的類型。
extern int sp;/* sp在別的地方定義,并分配存儲(chǔ)單元,本語句只是聲明它已經(jīng)定義過*/
該語句聲明了sp在別的地方已經(jīng)定義,并分配了存儲(chǔ)空間,本語句只是說明sp已經(jīng)定義過的類型為int,并不再為它分配內(nèi)存空間。這樣聲明以后,在本文件余下部分就可以使用sp了。1.自動(dòng)型變量
定義一個(gè)內(nèi)部變量時(shí),如果將auto加在定義語句前面,則該變量是自動(dòng)型變量;定義內(nèi)部變量時(shí),如果沒有加任何存儲(chǔ)類型限定,該變量默認(rèn)為自動(dòng)型變量。
auto只能修飾內(nèi)部變量,不能修飾外部變量。也就是說只有內(nèi)部變量可以定義為自動(dòng)型變量,外部變量不能定義為自動(dòng)型變量。
事實(shí)上,auto沒有什么實(shí)際用處。內(nèi)部變量已經(jīng)默認(rèn)為自動(dòng)型變量。
2.靜態(tài)型變量
外部變量和內(nèi)部變量都可以定義為靜態(tài)型變量。
如果在定義一個(gè)內(nèi)部變量時(shí),在定義語句最前面加上static存儲(chǔ)類型限定詞,那么該變量將是一個(gè)靜態(tài)型變量。該變量將在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。這種變量作用域雖然只在函數(shù)內(nèi)部,但是該變量將一直在靜態(tài)數(shù)據(jù)區(qū)占據(jù)存儲(chǔ)空間,直到程序運(yùn)行結(jié)束。
定義外部變量時(shí),如果不加存儲(chǔ)類型限定詞,它將在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。它的作用域除了本文件以外,其他文件通過extern語句聲明后也可訪問。
但是,如果在定義一個(gè)外部變量時(shí),加上static限定詞,其作用域?qū)⒆冋?,該變量只在本文件中可見,在其他文件中將不可見,此時(shí)在其他文件中即使用extern聲明也不能擴(kuò)展其作用域。這是一個(gè)外部靜態(tài)型變量,也在靜態(tài)數(shù)據(jù)區(qū)分配存儲(chǔ)空間。
注意:對(duì)于函數(shù)的作用域也是這樣,如果在函數(shù)定義時(shí)加上了static限定詞,那么該函數(shù)也只在其定義文件內(nèi)可見(“可見”的意思就是在在該范圍內(nèi)可以使用)。在其他文件中即使聲明了也不可以調(diào)用。另外,對(duì)于函數(shù)聲明而言可以省略extern關(guān)鍵字。
一個(gè)文件中加了static的同名外部變量將隱藏其他文件中定義的未加static的外部變量。也就是說,static變量能夠屏蔽其他文件中的同名外部變量,這功能有點(diǎn)像函數(shù)的內(nèi)部變量能夠屏蔽同名的外部變量一樣。但是,不同文件中如具有未加static的多個(gè)同名外部變量則是非法的。
static限定詞常用于外部變量,也可用于函數(shù)。正常情況下,函數(shù)名字是全局的,對(duì)程序的任何部分都是可見的。如果在定義一個(gè)函數(shù)時(shí)用static限定,該函數(shù)將在其定義文件以外不可見。
static限定詞同樣能夠應(yīng)用于內(nèi)部變量。此時(shí),該變量將是一個(gè)內(nèi)部靜態(tài)型變量。內(nèi)部靜態(tài)型變量就像自動(dòng)變量一樣是屬于某個(gè)特定函數(shù)的內(nèi)部變量。但是,同自動(dòng)型變量不同,它們一直在內(nèi)存中存在,而不是隨著函數(shù)的每次調(diào)用而存在,隨著函數(shù)調(diào)用結(jié)束而消失。這意味著內(nèi)部靜態(tài)型變量提供了單個(gè)函數(shù)內(nèi)部私有的、持久的存儲(chǔ)。也就是說內(nèi)部靜態(tài)型變量只在函數(shù)被調(diào)用時(shí)起作用,但是它將在程序的整個(gè)運(yùn)行時(shí)間內(nèi)一直占據(jù)內(nèi)存空間。
3.寄存器型變量
register限定詞通知編譯器--程序中的變量將頻繁使用。它的意思是建議編譯器將程序中用register限定的變量放置在計(jì)算機(jī)的內(nèi)部寄存其中,這樣可能得到更小更快的程序。但是,編譯器將根據(jù)實(shí)際情況考慮是否采納該建議--是否將register變量處理為寄存器變量最終決定權(quán)還是在編譯器。
如下使用register:
register int x;/*x必須是內(nèi)部變量*/
register char ch;/*ch必須是內(nèi)部變量*/
register只能用于限定自動(dòng)型變量和函數(shù)的形式參數(shù)。也就是說register只對(duì)內(nèi)部變量起作用,而且只能限定內(nèi)部非靜態(tài)型變量,不能限定內(nèi)部靜態(tài)型變量。
register也可以應(yīng)用于形式參數(shù),格式如下:
f(register unsigned m,register long n) /*register應(yīng)用于形式參數(shù)*/
{
? ? register int i; /* register應(yīng)用于內(nèi)部變量*/
}
在傳統(tǒng)C中,register變量的使用有諸多限制,它決定于硬件的實(shí)現(xiàn)方式。在每一個(gè)函數(shù)中只有少數(shù)幾個(gè)變量可以保存在寄存器中,而且也只有特定的類型才行。過量的register變量看起來是無害的,但是超量以后,編譯器將忽略新的register變量。另外不管register變量實(shí)際上是否被編譯器設(shè)置為寄存器型變量,都不可能取得該變量的地址。寄存器型變量的類型和數(shù)量的多少隨計(jì)算機(jī)不同而異。register變量一般只能夠設(shè)置幾個(gè)。傳統(tǒng)C的register類型限定于char、int等類型。像float、double、數(shù)組等是不可以設(shè)定為register型變量的。但是,在最新C99標(biāo)準(zhǔn)中,任何類型都可以定義為register變量,register聲明的目的只是告訴編譯器以盡快的速度處理該變量,編譯器不見得非把它處理為register變量。
4.外部型變量
如extern用于變量定義語句前面,那么該語句就只能是一個(gè)聲明語句了,他不再是一個(gè)變量定義語句。它僅僅是一個(gè)聲明--聲明該變量已經(jīng)在別的地方定義,只是告訴編譯器該變量的類型。
extern int sp;/* sp在別的地方定義,并分配存儲(chǔ)單元,本語句只是聲明它已經(jīng)定義過*/
該語句聲明了sp在別的地方已經(jīng)定義,并分配了存儲(chǔ)空間,本語句只是說明sp已經(jīng)定義過的類型為int,并不再為它分配內(nèi)存空間。這樣聲明以后,在本文件余下部分就可以使用sp了。