下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
變量的定義從前面的章節(jié)可以看出,程序中所有的東西幾乎都有名字。然而字面量卻是個例外,它沒有名字。那么使用變量,我們就可以為某個值取名字了。實際上,我們是為系統內存中用于保存數據的某塊空間取名字。ANSIC規(guī)定:變量必須“先定義、后使用”,因此當用C定義變量時,不僅需要指定變量名,而且還必須告訴編譯器其存儲的數據類型,變量類型告訴編譯器應該在內存中為變量名分配多大的存儲單元,用來存放相應變量的值(變量值),而變量僅僅是存儲單元的別名,供變量使用的最小存儲單元是字節(jié)(Byte)。由此可見,每個變量都占據一個特定的位置,每個存儲單元的位置都由“地址”唯一確定并引用,就像一條街道上的房子由它們的門牌號碼標識一樣。即從變量中取值就是通過變量名找到相應的存儲地址,然后讀取該存儲單元中的值,而寫一個變量就是將變量的值存放到與之相應的存儲地址中去。由于變量的定義不是可執(zhí)行代碼,因此要求局部變量的定義必須位于用“{}包圍的程序塊”的開頭,即在可執(zhí)行代碼的前面。比如:intlower_limit=80; //定義lower_limit為整型變量即在定義lower_limit為int類型數據時,系統就已經為變量lower_limit分配了存儲單元。請注意區(qū)分變量名和變量值這兩個不同的概念,其中,lower_limit為變量名,80為變量lower_limit的值,即存放在變量lower_limit的存儲單元中的數據。那么到底如何獲得變量的地址呢?C語言使用“&(地址運算符)加變量名”的方式獲取變量的地址,比如,&lower_limit就代表變量lower_limit的地址,詳見后續(xù)相關章節(jié)的描述。一個定義只能指定一種變量類型,雖然后面所帶的變量表可以包含一個或多個該類型的變量:intlower_limit,upper_limit,sum;但如果將一個定義語句中的多個變量拆開在多個定義語句中定義的話:intlower_limit;//lower_limit為數據下限intupper_limit;//upper_limit為數據上限intsum;//sum為求和的結果則可在各個定義語句中添加注釋,則大大提高了程序的可閱讀性,而且修改起來更加方便,但C編譯器會忽略在每行右邊用于描述變量用途的注釋語句。與此同時還可以在定義中,對變量進行初始化,即允許在變量名的后面緊跟一個等號以及一個表達式。intlower_limit=1;intupper_limit=lower_limit+50;intsum;外部變量的聲明由于變量lower_limit是在別的文件中定義的,那么只要在引用之前用關鍵字extern對該變量作“外部變量聲明”即可,無需再為變量lower_limit分配存儲單元,這種情況稱之為聲明或引用性聲明。比如:externintlower_limit; //將已定義的外部變量lower_limit的作用域擴展到此在這里將extern置于變量前,就是為了告訴編譯器變量lower_limit這個名字已經在別的文件中被定義了,因此遇到此變量時,需在其它模塊中尋找與之相應的定義。有時程序是由多個源程序文件組成的,那么只需要在其中任一個文件中定義外部變量lower_limit,而在另一個文件中用extern對變量lower_limit作“外部變量聲明”,即可將外部變量的作用域擴展到其它文件。當extern用于聲明外部變量時,則類型名可寫也可不寫,由于聲明變量不是定義變量,,則可以不指定類型,只需寫出變量名即可。比如:externlower_limit;注意:extern不僅可用于聲明變量,而且還可以用于聲明數組和指針,以及用于聲明外部函數,詳見后續(xù)相關章節(jié)的描述。靜態(tài)變量的定義當用static修飾變量時,則全局變量與局部變量都保存在內存的靜態(tài)區(qū)。即便函數運行結束,而靜態(tài)變量的值都不會被銷毀,以后仍然還可以繼續(xù)使用。(1)靜態(tài)全局(外部)變量當static用于定義外部變量時,則變量僅被所定義的文件使用,而其它文件則無法使用它。比如:staticunsignedchar __GucTask0; //任務0測試變量使用靜態(tài)全局變量的好處就是在進行模塊化程序開發(fā)時,不用擔心外部變量名的沖突,只需在每個文件中定義全局變量時加上static即可。(2)靜態(tài)局部變量靜態(tài)局部變量則是在函數體內定義的,那么只能在這個函數中使用。注意:static還可以用于修飾函數,如果在函數前加static,則該函數只能成為被本文件中的其它函數所調用的靜態(tài)函數(內部函數),其好處就是不用擔心函數名的沖突,便于模塊化開發(fā),詳見后續(xù)相關章節(jié)的描述。后記:任何一本教材都有一定的側重點和面向的讀者群,本教材是為“高等學校電類專業(yè)新概念教材.卓越工程師教育叢書”而寫作的配套圖書,適當淡化了計算機應用軟件的編程,重點強化了嵌入式系統應用中的程序設計,并將后續(xù)教材中與常用算法以及嵌入式操作系統微小內核關聯較大的內容提前作了鋪墊,為初學者讀懂《項目驅動——單片機應用設計基礎》教材中的TingOS51操作系統微小內核源代碼,并最終獨立寫出一個屬于自己的基于32位Cortex-M0核的嵌入式操作系統MiCOS(《ARM嵌入式系統初級教程(基于Cortex-M0)》教材的最后一章僅詳細地介紹了一個微小內核的設計思想,但未給出源代碼,要求初學者自己完成)打下扎實基礎。雖然過來人常常告訴初學者,學習程序設計一定多閱讀經典程序,一定要多上機編程,但總不見他們“多”起來,90%以上的大學生卻感到寫程序是一件非常痛苦的事情,以至于對所學的專業(yè)沒有絲毫的興趣。而大多數人普遍缺乏閱讀源代碼的方法和耐心,說句實在話,連“書(即程序的設計思想)”都沒有“真正地”看懂(想一想什么是“真正地”?),那又怎么會編程呢?雖然大凡高手都是“山寨”過來的,但要“山寨”出水平來卻不是一件容易的事情。其實并不難,關鍵是方法出了問題,我們都是“凡人”,不要與那些“聰明人”相比,我們應該下點苦功夫,用點土辦法,踏踏實實地賣苦力,肯定會有所突破,我將另行撰文作經驗介紹。其實剛開始我也沒有搞清楚“聲明與定義”的概念和含義,只會編程搞得我云里霧里,到底有沒有辦法搞清楚?其實“定義”不僅說明了保存的數據類型,而且還為變量分配了空間,即變量所占的字節(jié)數,那么你不妨寫一段程序,看看與之對應的匯編代碼便知道了。由此可見,“聲明”一個常量其實也是“定義”,比如,“constintwidth=80;”,因為系統為width分配了一個與之對應的存儲單元。暫時沒有搞清楚沒有關系,但一定不能放過?。?!雖然很多人閱讀過K/OS-II操作系統的源代碼,可到頭來還是不會寫一個簡單的OS,即便有些人很認真地“寫”了一個,但實際上卻是“抄”來的,為什么?很多人想要通過修改,期望搞出一點“不一樣”的意思出來卻非常困難。我認為,當初學者只有具備了一定的基礎之后,才有成為高手的興趣和可能,這就是作者的教學思想和出發(fā)點。常變量的聲明為了提高程序的可閱讀性與可維護性,ANSIC允許用戶命名常量(namedconstant,聲明為const的變量)。當它被初始化之后,它的值便不能改變。ANSIC規(guī)定:可以使用const關鍵字聲明常量,修飾符const可以用在類型說明符前,也可以用在類型說明符后。比如:intconstMAX_LENGTH=78; //命名常變量的最佳方式是使用大寫字母constintMAX_LENGTH=78; //MAX_LENGTH的初值為78雖然const修飾的值是常量,而實際上MAX_LENGTH卻是一個只讀變量。通過匯編代碼可以看出,編譯器僅僅給出了MAX_LENGTH變量對應的內存地址,卻并沒有為MAX_LENGTH變量分配存儲空間,而是將其保存在符號表中,編譯器在編譯時直接進行“替換”優(yōu)化。*注意:const除了可以修飾只讀變量之外,還可以用于修飾數組、指針、函數的參數與函數的返回值,詳見后續(xù)相關章節(jié)的描述。5.標識符ANSIC規(guī)定標識符只能由字母、數字和下劃線3種字符組成,且第1個字符必須為字母或下劃線。比如:__GucTask0*注意:C是區(qū)分大小寫字母的語言,也就是說,由相同字母組成的字符,如果大小寫不同,就會被看做不同的字符。比如,命名age與sum的變量與Age或AGE以及Sum的變量就是不同的變量。一般來說,變量名常用小寫字母來表示,比較符合人們的閱讀習慣。雖然ANSIC并沒有規(guī)定標識符的長度,但各個編譯器都有自己的規(guī)定,比如,TurboC則允許變量名最多不超過32個字母。關鍵知識點:變量的聲明與定義廣義地說,聲明包含定義,但并非所有的聲明都是定義。對于“intlower_limit;”來說,它既是聲明又是定義;而對“externlower_limit;”來說,它是聲明不是定義?!奥暶鳌眱H僅告訴編譯器變量名的值的類型而已,不會生成目標代碼,當然也不會給它分配存儲空間,更不會增大可執(zhí)行程序的體積。由于聲明并不分配存儲空間,因此同一個聲
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體驗店行業(yè)市場營銷總結
- 2025-2030全球無DEHP分隔膜無針輸液接頭行業(yè)調研及趨勢分析報告
- 2025-2030全球基因組注釋服務行業(yè)調研及趨勢分析報告
- 2025-2030全球酚醛彩鋼板行業(yè)調研及趨勢分析報告
- 2025年全球及中國隧道安全監(jiān)測系統行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球燃氣輪機仿真軟件行業(yè)調研及趨勢分析報告
- 2025年全球及中國自動水力平衡閥行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球辦公室文件柜行業(yè)調研及趨勢分析報告
- 2025年全球及中國4-苯氧基苯酚行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球太空級電機控制器行業(yè)調研及趨勢分析報告
- 護理人文知識培訓課件
- 建筑工程施工安全管理課件
- 2025年春新人教版數學七年級下冊教學課件 7.2.3 平行線的性質(第1課時)
- 安徽省合肥市2025年高三第一次教學質量檢測地理試題(含答案)
- 2025年新合同管理工作計劃
- 統編版八年級下冊語文第三單元名著導讀《經典常談》閱讀指導 學案(含練習題及答案)
- 風光儲儲能項目PCS艙、電池艙吊裝方案
- 統編小學《道德與法治》三年級上下冊教材的解讀
- 產業(yè)鏈競爭關聯度
- TTJSFB 002-2024 綠色融資租賃項目評價指南
- 高考地理一輪復習學案+區(qū)域地理填圖+亞洲
評論
0/150
提交評論