前言
說起指針?biāo)闶莻€ 在 CC++ 中老生長談的話題,但是今天我從另外一個角度給各位看官分析一下為什么非要引入指針這個讓人看到都頭疼的東西? 想必學(xué)過指針的都被它的各種繁瑣所折磨,另一種角度講就是被他的靈活易用所征服。不知道大家學(xué)習(xí)過只要是帶指針的地方,都可用使用非指針的東西去表達(dá)出來(你愿意的話),甚至比用指針看著還簡便,所以問題也來了,為什么要引入指針呢?好處何在?
正文
在說為什么引入指針這個問題前先帶大家了解一下什么是指針?
指針最為簡短的定義:指針即為內(nèi)存的地址。 那什么是內(nèi)存呢?舉個栗子當(dāng)我們計(jì)算 4*(46+4)時,我們?nèi)四X會想到先有個中間值 50 然后再計(jì)算成 200,計(jì)算機(jī)也會這樣有一個 50 的中間值,我們?nèi)四X在計(jì)算的時候50 這個中間值保存在我們的萬能的腦子中,計(jì)算機(jī)在出現(xiàn)最終答案前也會把這個中間值一個方便它進(jìn)行下一步計(jì)算的地方,這地方就是內(nèi)存,實(shí)際上我們寫程序的時候定義的所有變量都保存在內(nèi)存中,可以想象一個大的程序所占用的內(nèi)存是不容小覷的,在計(jì)算機(jī)剛被制造出來的時候那些大佬是如何節(jié)省每一個字符的。至今內(nèi)存的占用是每一個合格的程序員所需要注意的事情,至此我們得出一個結(jié)論:寫程序需要盡可能少的內(nèi)存。
那么內(nèi)存的地址又是什么呢?這個說來話長,不了解的可以到網(wǎng)上和書上查看一下,每個地方都會有很多敘述。假如我們定義了char a=’A’,當(dāng)需要使用這個‘A’時,除了直接調(diào)用變量a,另一種方式就是調(diào)用a的地址,即指向a的指針p(假設(shè)定義了char *p=&a)。這里請思考一個問題:究竟是a占用的內(nèi)存大呢還是p占用的內(nèi)存大,a顯然只占了一個字節(jié)(char類型),p呢?p 占用了 4 個字節(jié)。既然p中存儲的是a的地址,也就是說這個問題實(shí)際演變?yōu)榱藘?nèi)存的地址需要多少位(bit)來編碼。再假如我們定義的char a1[30]="C語言程序設(shè)計(jì)能夠讓你成為優(yōu)秀的程序員"占用 30 個字節(jié),也有一個char *p1=a1 這個時候 a1占用 30 個字節(jié)而 p1 占用4個字節(jié)(字符串地址 = 首字符地址)。 那么假如你要引用的是一個 5G 的東西(這個應(yīng)該是CPU總線的地址不懂的暫時叫這個東西)用指針也還是 4 個字節(jié)即可。由此我們得出結(jié)論:使用指針型變量在很多時候占用更小的內(nèi)存空間。
明白了引入指針的好處,我們再來看一個例子,第一節(jié)課是1班語文,2班數(shù)學(xué),第二節(jié)課顛倒過來,1班要上數(shù)學(xué),2班要上語文,那么第一節(jié)課下課后需要怎樣作調(diào)整呢?方案一:課間1班學(xué)生全都去2班,2班學(xué)生全都來1班,當(dāng)然,走的時候要攜帶上書本、筆紙、零食……場面一片狼藉;方案二:兩位老師課間互換教室。怎樣,有沒有發(fā)現(xiàn)這個例子很像一道題目“請交換變量a和變量b的值”,現(xiàn)在,大家知道怎么做是最優(yōu)解了么?
-
C語言
+關(guān)注
關(guān)注
180文章
7576瀏覽量
133998 -
指針
+關(guān)注
關(guān)注
1文章
475瀏覽量
70457
原文標(biāo)題:經(jīng)驗(yàn) | 一文了解 C語言 為什么要引入指針?
文章出處:【微信號:xx-cyy,微信公眾號:C語言編程基礎(chǔ)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論