官术网_书友最值得收藏!

第42章 逆天改命的秘密

  • 程序媛養成計劃
  • 任煦之秋
  • 2063字
  • 2020-05-14 21:15:15

爺爺擺了擺手,然后就和奶奶坐在餐桌前,就著小籠包子和稀飯把早餐給對付了。

昨天我發燒暈過去后,老爹抱著我就往醫院跑,然后他和老媽就一直守在病床邊,寸步不離。老媽守到半夜就靠著老爹淺睡了一會兒,老爹繃緊了神經,硬是一宿沒有合眼。

這個時候放松下來,再加上吃飽喝足,當然是倦意來襲。要是我,多半早就倒在床上呼呼大睡了,可是這兩口子非要堅持沖個澡再休息。

老爹明明已經困得不行了,但還是沒有忘了女士優先的紳士風度。女人就是麻煩,老媽足足洗了半個多小時,老爹在沙發上坐著等都睡著了。

洗完澡,老爹老媽就回他們臥室休息去了。我感冒初愈,今天自然是不會有新的課程,閑來無事之際,我把老爹昨天講的和函數相關的知識回顧了一遍,進而將推箱子的代碼打開,想著應該如何將灰太狼移動這部分用函數實現。

可是想了半天都無從下手,按捺住跑到老爹老媽臥室將老爹喊醒的沖動,我只好聯系小弦子,看看他能不能有什么好的辦法。

雖然我們倆在基本理論知識上面學得還不錯,但畢竟還缺少這方面的經驗,一陣討論下來,也沒有討論出個結果。

「連比我聰明的小弦子都不知道該怎么辦,那我不會也正常了。」

我坦然地用這個理由說服了自己。

既然沒有事情可以做了,不如玩兒兩把游戲放松放松。和小弦子開黑玩兒兩局,我也漸漸感到倦意來襲……

新學期剛剛開始,學習的內容并不多。不知道是不是因為和老爹學習編程的緣故,我覺得書上的內容超級簡單易懂,基本上看一遍就會了。

等到老爹的課堂再次開課時,又是一周過去了。

星期六一早,我們一家剛剛吃過飯,小弦子便到了。不過這一次小弦子家有些興師動眾,就連很久不見的六叔叔都來了!

他們大人聊了幾句后,老媽和小鹿阿姨相約去逛商場,在問我和小弦子要不要去的時候,我倆那頭要得跟撥浪鼓似的。

開玩笑,跟著她們去逛商場不是自己找罪受么?腳桿走斷不說,還得給她們提東西,于是我和小弦子就躲在我臥室里邊玩兒游戲。

爺爺奶奶知道六叔叔和老爹有事情要談,也到小區遛彎兒去了,客廳中就剩下了老爹和六叔叔。

「新項目上出了點問題,想聽聽你的意見。」

六叔叔還是那么直來直往,開門見山。

老爹先從冰箱里給六叔叔拿了一瓶雪碧,又拿了幾包零食,這才坐在沙發上和六叔叔交談。

這一談就是一上午,我們的課程也順延到了下午。

因為有六叔叔的加入,我的臥室自然容不下這么多人,于是老爹把上課地點轉移到了客廳中。為了我方便敲代碼,老爹將他上大學時買的那臺筆記本給我用了。

這電腦都快買了20年了,運行的速度依然還是很快的,唯一的問題就是電池一點都不耐用了。

一切準備就緒后,老爹把他電腦屏幕投放在了投影儀上。

「上一周我們先聊了函數,知道了什么是函數,為什么要用函數以及如何使用函數,接下來又說到了變量的作用域、全局變量和局部變量。

最后說到關鍵字static能夠幫局部變量逆天改命,讓局部變量成為與天地同壽的存在,小弦子提出疑問,static是如何做到的,于是就引出了C語言的程序運行時在內存中分區。

C語言的程序運行時在內存中的分區按照內存地址從低到高一共分為:代碼區、常量區、全局數據局、堆區、棧區,其中代碼區和常量區已經介紹過了。

代碼區存放的編譯成機器語言的程序代碼,CPU在執行程序的時候,會挨著挨著讀取、執行,最后在程序結束的時候由系統釋放。

常量區存放的是數字、字符、字符串等常量。至于什么常量,我們也用100塊買薯片的例子來說明了。

這里要補充一點,有個神奇的關鍵字能夠將一個變量變成一個常量,它就是const,如果一個變量在聲明時被const修飾,那么這個變量就搖身一變,變成了一個常量。

這樣的變量需要在聲明時并對其初始化,一旦初始化完成后,這個變量就和其他常量一樣不能再修改了,就像這樣:

const int PIC_WIDTH = 50;

int const PIC_WIDTH = 50;

這兩條語句表達的意義都是一樣的,都是符合C語言規范的,你們可以選擇一種自己喜歡的方式,不過兩種方式都要認識,不然以后看到別人用另外一種方式還以為是人家用錯了,那就糗大了。

被const修飾的全局變量,也就是全局常量也是放在常量區的。」

我和小弦子都都嘗試了一下,如果聲明一個被const修飾的變量不對其進行初始化,編譯器會報錯。如果初始化之后又對其進行賦值,依然會報錯。

「第三個區:全局數據區,所有被static的變量和全局變量都是放在全局數據區的,這個區也是在程序結束以后由系統釋放。

第四個取:堆區,使用這個區就需要我們自己申請使用內存了,并且還必須自己釋放。如果申請了內存不釋放,就會導致內存泄露。假設在一個死循環中不斷申請內存并且不釋放的話,那計算機秒秒鐘就會因為內存耗盡卡死了。

申請內存的函數是malloc,釋放是free,都是由庫函數提供的。

最后一個區:棧區,所有除static修飾的局部變量都是放在這個區的,包括被const修飾的局部常量。一旦一個局部變量脫離了作用域,那么系統就會在棧中將它無情的殺死。

而static之所以能夠為局部變量逆天改命,就是因為被它修飾后的變量已經從棧區轉移到了全局數據區,這個區里的數據要等到程序結束的時才會被釋放,都是和天地同壽的存在。」

「哦哦,原來是這樣哦……」

難怪老爹要這么大的力氣給我們講內存分區,原來就是為了這一句話服務。

「static除了有給局部變量逆天改命,它還有另外一個技能——隱身術。」

主站蜘蛛池模板: 寿阳县| 桐城市| 辽中县| 西乌珠穆沁旗| 福建省| 张家界市| 萨嘎县| 嘉定区| 汝阳县| 东平县| 荆州市| 舞阳县| 南平市| 星座| 新邵县| 卫辉市| 永安市| 磴口县| 高清| 奇台县| 自贡市| 微山县| 兰考县| 福清市| 巩留县| 金湖县| 祁连县| 电白县| 化德县| 伊吾县| 金寨县| 上虞市| 永善县| 五大连池市| 巴里| 桃园县| 涪陵区| 五台县| 同江市| 扎赉特旗| 永川市|