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

第51章 指針(五)

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

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

我迷惑道。

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

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

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

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

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

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

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

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

哦,對了,還忘了字符數(shù)組,瞧我這記性。唉,看來真的是老了。但凡是三十五歲前一天也不至于這樣啊。」

老爹拍了拍自己的腦袋,感嘆一聲歲月催人老。

「其實將字符數(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關鍵字給char*取了一個別名叫String,所以別看有些人表面上叫String,其實背地里就是char*。

這里的typedef是個關鍵字,這家伙沒有什么別的愛好,就是喜歡給人取別名,以后在定義結構體、枚舉類型的時候會經(jīng)常和它打交道,到時候你們就會喜歡上它的。」

「哦~,好吧。」

「到這里呢,指針和數(shù)組結合的基本用法我就講完了。從進入指針開始,理論性的東西就開始變得多了起來,所以只是憑借我在課堂上講是遠遠不夠的,還需要多寫代碼練習,這才能領悟其中的真諦。

既然說完了數(shù)組和指針,那么我們接下來就要說函數(shù)和指針結合的用法了。」

「啥?函數(shù)還能和指針扯上關系?」

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

說一個不怎么恰當?shù)谋扔鳎羔樉拖袷巧裨拏髡f中的生死簿,一切都在其掌握之中!」

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

「所以我才說是不怎么恰當?shù)谋扔靼。驗樵诔绦蚴澜缰校瑳]有任何事物能夠逃離指針的掌控。

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

老爹嚴肅地說道。

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

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

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

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

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

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

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

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

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

以前老爹寄居在雲(yún)姑姑家的時候,隔壁就上網(wǎng)吧,經(jīng)常看到很多家長來網(wǎng)吧里面逮人,甚至于當街打罵小孩兒,和網(wǎng)管發(fā)生沖突。

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

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

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

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

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

主站蜘蛛池模板: 南安市| 南通市| 克拉玛依市| 吴桥县| 依兰县| 英德市| 琼海市| 巧家县| 皋兰县| 新疆| 乐业县| 永登县| 白玉县| 玛沁县| 濮阳市| 万安县| 化德县| 深水埗区| 五家渠市| 宿迁市| 新民市| 会东县| 霍邱县| 阜康市| 茂名市| 大厂| 浦北县| 泰和县| 仪陇县| 穆棱市| 芦溪县| 玉树县| 平定县| 象州县| 义马市| 且末县| 惠州市| 秦安县| 宾川县| 乃东县| 大城县|