




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
人們常說(shuō),C語(yǔ)言的聲明太復(fù)雜了,的確,這也是C語(yǔ)言飽受批評(píng)的地方之一。不過(guò),筆者認(rèn)為,真正要受到批評(píng)的不是語(yǔ)言本身,而是那些傳播者。傳播者們通常都有一個(gè)共識(shí):講述要由淺入深。作為原則,筆者并非要反對(duì)它,畢竟筆者對(duì)C語(yǔ)言的學(xué)習(xí),也經(jīng)歷了相同的過(guò)程。但是,由淺入深并不意味著一切從簡(jiǎn),以偏蓋全。計(jì)算機(jī)語(yǔ)言不同于數(shù)學(xué)理論(雖然它的確根植于數(shù)學(xué),與數(shù)學(xué)密不可分),數(shù)學(xué)理論是一種循序漸進(jìn)的過(guò)程,后面的理論以前面的理論為基礎(chǔ)。但C語(yǔ)言歸根說(shuō)底,就是一堆語(yǔ)言規(guī)則而已,應(yīng)該讓學(xué)習(xí)者一開(kāi)始就全面且詳細(xì)地了解它,而不是象現(xiàn)在某些教材所做的那樣,只說(shuō)一部分,不說(shuō)另一部分,以為這就是由淺入深了,實(shí)際上這是以偏蓋全。語(yǔ)言如此,聲明作為C語(yǔ)言的一部分更是如此。我們最常見(jiàn)到的對(duì)聲明的描述是這樣的:存儲(chǔ)類別類型限定詞類型標(biāo)識(shí)符這種說(shuō)明會(huì)給人們一種暗示:C語(yǔ)言的聲明是靜止的、死板的,什么聲明都能夠以這個(gè)為基礎(chǔ),往上一套就OK了。事實(shí)真的如此嗎?說(shuō)句心里話,筆者也祈禱事實(shí)真的如此,這樣世界就簡(jiǎn)單多了、清靜多了。但別忘了,這個(gè)世界總是讓人事與愿違的。實(shí)際上,C的聲明的組織形式是以嵌套為基礎(chǔ)的,是用嵌套聲明組織起來(lái)的,并非象上面所述那么死板,存儲(chǔ)類說(shuō)明符一定得放在限定詞前面嗎?類型說(shuō)明符一定要緊貼標(biāo)識(shí)符嗎?不C標(biāo)準(zhǔn)從來(lái)沒(méi)有這樣說(shuō)過(guò)!下面來(lái)看一看C89對(duì)聲明的形式是如何規(guī)定的:聲明:聲明說(shuō)明符初始化聲明符表opt[opt的意思是option,可選]其中聲明說(shuō)明符由以下三項(xiàng)構(gòu)成:聲明說(shuō)明符:存儲(chǔ)類說(shuō)明符聲明說(shuō)明符opt類型說(shuō)明符聲明說(shuō)明符opt類型限定符聲明說(shuō)明符opt在這里,一個(gè)聲明說(shuō)明符可以包含另一個(gè)聲明說(shuō)明符,這就是聲明的嵌套,這種嵌套貫穿于整個(gè)聲明之中,今天我們看來(lái)一個(gè)非常簡(jiǎn)單的聲明,其實(shí)就是由多個(gè)聲明嵌套組成的,例如:staticconstinti=10,j=20,k=30;變量i前面就是聲明說(shuō)明符部分,有三個(gè)聲明說(shuō)明符:staticconstint,static是一個(gè)存儲(chǔ)類說(shuō)明符,它屬于這種形式:static聲明說(shuō)明符static后面的聲明說(shuō)明符就是constint,const是一個(gè)類型限定符,這也是個(gè)嵌套,它是由const聲明說(shuō)明符組成,最后的int是一個(gè)類型說(shuō)明符,到這里已經(jīng)沒(méi)有嵌套了,int就是最底的一層。對(duì)于存儲(chǔ)類說(shuō)明符、類型說(shuō)明符和類型限定符的排列順序,C標(biāo)準(zhǔn)并沒(méi)有規(guī)定其順序,誰(shuí)嵌套誰(shuí)都可以。換言之,上面的聲明可以寫成:intstaticconsti=10,j=20,k=30或者constintstatici=10,j=20,k=30;這無(wú)所謂,跟原聲明是一樣的。再舉一個(gè)有趣的例子:constint*p;與intconst*p;有些人會(huì)對(duì)后面一種形式感到困惑,因?yàn)樗恢币詠?lái)學(xué)習(xí)的都是那種死板的形式,因此他無(wú)法理解為什么那個(gè)const可以放在int的后面。實(shí)際上對(duì)于標(biāo)準(zhǔn)來(lái)說(shuō),這是再正常不過(guò)的行為了。上面舉的例子是變量的聲明,函數(shù)的聲明也同樣道理,例如:staticconstintfunc(void);intmain(void){intstaticconst(*p)(void);p=func;return0;}constintstaticfunc(void)return0;}func的函數(shù)原型聲明、函數(shù)定義跟main內(nèi)的函數(shù)指針p的聲明是一樣的。但是,筆者并非鼓勵(lì)大家把聲明說(shuō)明符寫得亂七八糟,作為一個(gè)良好的風(fēng)格,應(yīng)該按照已經(jīng)習(xí)慣約定的方式排列說(shuō)明符,但懂得其中的原理非常重要。聲明staticconstinti=10,j=20,k=30;的int后面的部分就是初始化聲明符表,這比較容易理解,這個(gè)符表實(shí)際上也是嵌套的:初始化聲明符表:初始化聲明符初始化聲明符表,初始化聲明符初始化聲明符:聲明符聲明符=初值聲明符是初始化聲明符的主體,現(xiàn)在來(lái)討論一下聲明符是如何規(guī)定的:聲明符:指針opt直接聲明符這里寫的指針opt指的是那個(gè)指針聲明符*,要注意的是,*屬于聲明符,而不是聲明說(shuō)明符的一部分。指針opt又包含:指針:*類型限定符表opt*類型限定符表opt指針在這里有一個(gè)常見(jiàn)的問(wèn)題,就是constint*p;與int*constp的區(qū)別,第一個(gè)聲明的const屬于聲明說(shuō)明符,它跟int一起,是用來(lái)說(shuō)明*p這個(gè)聲明符的,因此const修飾的是p所指向的那個(gè)對(duì)象,這個(gè)對(duì)象是const的。而第二個(gè)聲明的const是聲明符的一部分,它修飾的對(duì)象是p本身,因此p是const的。上面規(guī)定的第二條值得注意,這條規(guī)定產(chǎn)生了一種指針與const的復(fù)雜形式,例如:constint*const***const**constp;(是不是有種想沖向廁所的沖動(dòng)?)這是一種復(fù)雜的聲明嵌套,如何解讀這種聲明?其實(shí)只要掌握了它的規(guī)律,無(wú)論它有多少個(gè)const、多少個(gè)*都不難解讀的,這個(gè)內(nèi)容我將在第九章進(jìn)行解釋。剩下的就是直接聲明符和類型限定詞表的內(nèi)容:直接聲明符:標(biāo)識(shí)符(聲明符)直接聲明符[常量表達(dá)式opt]直接聲明符(形式參數(shù)類型表)直接聲明符(標(biāo)識(shí)符表opt)類型限定符表:類型限定符類型限定符表類型限定符這一章的最后一個(gè)內(nèi)容,是討論一下typedef,typedef用來(lái)聲明一個(gè)別名,typedef后面的語(yǔ)法,是一個(gè)聲明。本來(lái)筆者以為這里不會(huì)產(chǎn)生什么誤解的,但結(jié)果卻出乎意料,產(chǎn)生誤解的人不在少數(shù)。罪魁禍?zhǔn)子质悄切┖θ说慕滩?。在這些教材中介紹typedef的時(shí)候通常會(huì)寫出如下形式:typedefintPARA;這種形式跟#defineintPARA幾乎一樣,如前面幾章所述,這些教材的宗旨是由淺入深,但實(shí)際做出來(lái)的行為卻是以偏蓋全。的確,這種形式在所有形式中是最簡(jiǎn)單的,但卻沒(méi)有對(duì)typedef進(jìn)一步解釋,使得不少人用#define的思維來(lái)看待typedef,把int與PARA分開(kāi)來(lái)看,int是一部分,PARA是另一部分,但實(shí)際上根本就不是這么一回事。int與PARA是一個(gè)整體!就象inti:聲明一樣是一個(gè)整體聲明,只不過(guò)inti定義了一個(gè)變量,而typedef定義了一個(gè)別名。這些人由于持有這種錯(cuò)誤的觀念,就會(huì)無(wú)法理解如下一些聲明:typedefinta[10];typedefvoid(*p)(void);他們會(huì)以為a[10]是int的別名,(*p)(void)是void的別名,但這樣的別名看起來(lái)又似乎不是合法的名字,于是陷入困惑
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 軌道交通設(shè)施對(duì)城市景觀的影響分析考核試卷
- 鎂礦開(kāi)采安全風(fēng)險(xiǎn)評(píng)估與防范措施考核試卷
- 航運(yùn)物流與區(qū)塊鏈技術(shù)考核試卷
- 航空器飛行器駕駛員培訓(xùn)與考核試卷
- 成人高考法律基礎(chǔ)知識(shí)與案例分析考核試卷
- 鉻礦在建筑材料領(lǐng)域的應(yīng)用研究考核試卷
- 牙齒的常見(jiàn)疾病類型概述
- 體育課急救知識(shí)
- 口腔設(shè)備學(xué)X線洗片機(jī)
- 麻醉手術(shù)室基礎(chǔ)認(rèn)知與操作規(guī)范
- 昆明市用人單位人員就業(yè)(錄用)登記表
- 公司職業(yè)病危害防治責(zé)任制度
- 第十八章:爬行綱課件
- 米亞羅-孟屯河谷風(fēng)景名勝區(qū)旅游基礎(chǔ)設(shè)施建設(shè)項(xiàng)目環(huán)評(píng)報(bào)告
- 滁州市第一人民醫(yī)院醫(yī)療暫存間環(huán)保設(shè)施提升改造項(xiàng)目環(huán)境影響報(bào)告表
- 籍貫對(duì)照表完整版
- 警用無(wú)人機(jī)考試題庫(kù)(全真題庫(kù))
- 中等職業(yè)學(xué)校英語(yǔ)課程標(biāo)準(zhǔn)(2020年版)(word精排版)
- 醫(yī)保業(yè)務(wù)知識(shí)題庫(kù)
- 等級(jí)醫(yī)院評(píng)審中應(yīng)注意的迎評(píng)禮儀
- 吉林省長(zhǎng)春市東北師大附中明珠學(xué)校2023年物理八年級(jí)第二學(xué)期期末統(tǒng)考模擬試題含解析
評(píng)論
0/150
提交評(píng)論