首頁 現(xiàn)實

程序媛養(yǎng)成計劃

第五十章 指針(五)

程序媛養(yǎng)成計劃 任煦之秋 2045 2020-05-23 21:19:15

  得到了老爹的肯定后我是信心大增,繼續(xù)解讀后面兩句的含義。

  「老爹,按照你說的辦法,這第三句和第二句解讀出來的含義是一樣的啊,都是:p是一個變量,指向一個int常量?!?p>  我迷惑道。

  同時我向小弦子投去了詢問的神色,小弦子也是搖了搖頭,表示自己也沒用弄明白。

  「這是因為const來修飾一個變量的時候既可以放在數(shù)據(jù)類型前面,也可以放在數(shù)據(jù)類型后面,所以才導(dǎo)致了會出現(xiàn)這樣的情況。

  至于你們選擇用哪一種形式,就看個人愛好了。」

  「原來是這樣啊,那好吧。最后一句是:p是一個常量,指向一個int常量。這樣的話不但p的地址不能修改,*p也不能修改吧?」

  「嗯,不錯,你們已經(jīng)掌握了指針和const結(jié)合的用法了。不過縱觀我這么多年寫代碼的經(jīng)驗,上面四句代表的三種的情況,一般int const*這種使用是最多的,int* const 和 int const* const這兩種用得比較少。

  現(xiàn)在我們已經(jīng)知道了,指針變量指向一個地址,和這個地址對應(yīng)的可以是一個變量,也可以是一個數(shù)組。先前我們舉的例子都是一維數(shù)組,那指針變量是不是可以指向一個多維數(shù)組呢?比如說二維數(shù)組。

  答案當(dāng)然是可以的,當(dāng)你用一個指針指向一個多維數(shù)組的時候,你就會神奇地發(fā)現(xiàn),多維數(shù)組一下子就變成了一維數(shù)組,這恰好說明了數(shù)組其實就是內(nèi)存中的一段連續(xù)空間。

  具體的我這這里就不多講了,你們有興趣自己可以寫段代碼試一試。到這里,指針和數(shù)組的結(jié)合使用我基本上就講完了。

  哦,對了,還忘了字符數(shù)組,瞧我這記性。唉,看來真的是老了。但凡是三十五歲前一天也不至于這樣啊?!?p>  老爹拍了拍自己的腦袋,感嘆一聲歲月催人老。

  「其實將字符數(shù)組主要是為了講字符串,現(xiàn)在我們都知道字符串其實就是一個字符數(shù)組,以前我們表示一個字符串可能是這樣:

  char str[]=“hello world“;

  還記得這個字符數(shù)組長度是多少么?」

  「1……2……10……11……哦,不對!是12,用引號賦值的字符數(shù)組會自動加上反斜杠0!」

  「嗯,不錯不錯,還記得這個!

  現(xiàn)在有了指針,我們還可以用另外一種方式來表示字符串:

  char* str =“hello world“;

  這樣是不是更加簡潔,優(yōu)雅?」

  「不就省了一個字符嘛,有什么好簡潔、優(yōu)雅的?」

  我翻了一個白眼。

  「好吧,蘿卜青菜,各有所愛。說到這里,其實還有一種更加優(yōu)雅的寫法:

  typedef char* String;

  int main(int argc, char const* argv[])

  {

  String name =“zhangsan“;

  printf(“%s“, name);

  }

  String就是字符串的意思,我們使用typedef關(guān)鍵字給char*取了一個別名叫String,所以別看有些人表面上叫String,其實背地里就是char*。

  這里的typedef是個關(guān)鍵字,這家伙沒有什么別的愛好,就是喜歡給人取別名,以后在定義結(jié)構(gòu)體、枚舉類型的時候會經(jīng)常和它打交道,到時候你們就會喜歡上它的?!?p>  「哦~,好吧?!?p>  「到這里呢,指針和數(shù)組結(jié)合的基本用法我就講完了。從進入指針開始,理論性的東西就開始變得多了起來,所以只是憑借我在課堂上講是遠遠不夠的,還需要多寫代碼練習(xí),這才能領(lǐng)悟其中的真諦。

  既然說完了數(shù)組和指針,那么我們接下來就要說函數(shù)和指針結(jié)合的用法了?!?p>  「啥?函數(shù)還能和指針扯上關(guān)系?」

  「沒什么不可能的,不管是函數(shù)也好,變量也好,它們都是存在內(nèi)存當(dāng)中,既然在內(nèi)存中,自然是有地址的。既然有地址,那就難以逃脫指針的掌控。

  說一個不怎么恰當(dāng)?shù)谋扔?,指針就像是神話傳說中的生死簿,一切都在其掌握之中!」

  「那孫悟空不是將自己和那些猴子猴孫們從生死簿上劃去了么?」

  「所以我才說是不怎么恰當(dāng)?shù)谋扔靼?,因為在程序世界中,沒有任何事物能夠逃離指針的掌控。

  也正因為如此,如果不能正確的使用指針就可能導(dǎo)致整個程序世界崩塌!」

  老爹嚴肅地說道。

  「其實我們的操作系統(tǒng)也是一個程序,它在運行的時候也要占用內(nèi)存。這就是為什么我的電腦一開機什么軟件都不運行,內(nèi)存就會被占用百分之二十左右。

  我們在使用指針的時候就可能讓其指定到和系統(tǒng)相關(guān)的內(nèi)存單元上,如果對其進行修改就可能導(dǎo)致系統(tǒng)崩潰。

  所以使用指針一定要小心,一個指針使用之前必須要為其初始化,并確認其指向的位置。否則就可能被隨機分配到和系統(tǒng)相關(guān)的內(nèi)存,進而導(dǎo)致可怕的后果。」

  「既然指針這么危險,為什么還要使用呢?」

  「無論什么東西都是具有兩面性的,比如說電能,能夠給我們提供便捷的生活,但同時也有可能對人造成傷害。

  還有我們現(xiàn)在使用的電腦,其實在老爹讀書那個時代,很多人對電腦的存在也是持有不同的意見的。電腦可以用來學(xué)習(xí)、編程、進行科學(xué)運算、仿真等等,也可以用來娛樂,游戲。

  但是我像你們這么大的時候,電腦還沒有普及,特別想咱們老家農(nóng)村,根本就難得見到電腦的蹤影。

  那時不少學(xué)生跑到網(wǎng)吧打游戲,沉迷于其中無法自拔,最終導(dǎo)致成績嚴重下滑,甚至于輟學(xué)。

  很多家長將其歸咎于電腦之上。

  以前老爹寄居在雲(yún)姑姑家的時候,隔壁就上網(wǎng)吧,經(jīng)??吹胶芏嗉议L來網(wǎng)吧里面逮人,甚至于當(dāng)街打罵小孩兒,和網(wǎng)管發(fā)生沖突。

  且不說遠了,就是我們家。一開始我讓玥玥接觸電腦的時候,爺爺奶奶還是反對的。

  但是難道因為如此,我們就不使用電腦了么?

  指針的的確可能會導(dǎo)致程序,乃至系統(tǒng)崩潰,但是它能夠給我們帶來的好處也是毋庸置疑的,關(guān)鍵取決于使用的人!

  佛家有云:『一念成佛,一念成魔。』

  我希望你們在看待任何事物的時候,不要只看到片面,最好像看待指針一樣,以辯證的方式分析它的兩面性。」

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進入下一章  按 “空格鍵” 向下滾動
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁
返回書頁
指南