讓c語言指針再也不困擾你

指針對一部分初學者來講一直是一個沒法逾越的障礙,沒有指針的C語言就好像沒有左腿的短跑運動員。今天我來試試換一種方法來理解指針,但願能幫還在爲指針掙扎的朋友們理清思路,高手略過便可。     咱們先認爲內存是一家客棧(看起來這和老掉牙的大樓的比喻沒什麼區別,可是請你耐心看下去)。 同大部分的客棧同樣,這家客棧有天、地、人等各類檔次的房間,用如今的話就是單人間、雙人間、四人間等等。來住店的客人也是車水馬龍,三教九流都有,咱們看看都有哪些人:     快樂單身漢char,還有char的小弟unsigned char,他們只住單人間;     short int, unsigned short int都是已婚無孩,他們只住二人間;     int, unsigned int, long int, unsigned long int,這些都是四口之家,固然住四人間了;提及來這裏面的前兩位,int和 unsigned char,在dos時代仍是二人世界,住二人間,後來出了32位系統後,他們才成爲四口之家,等到了64位時代,他們中有人會變成8口之家。人口變化太快,因此人口問題就不討論了,只要知道有幾口人(幾個字節)就住幾人間就好了。     另外還有一些更龐大的家庭double,float咱們就不一一贅述了。     住客棧是要登記的,至少老闆要知道哪一個房間沒人住,好租給新來的客人吧?因而就把每位客人的房間號都記在了紙上,而後把紙卷在了針上,大大節省了空間,這就是紙針(指針*)啦,^_^。爲了安全,登記完的指針也放在客房裏了,不過是沒有人住的房間。     爲了區分不一樣身份的客人(本客棧不搞歧視,區分身份只是爲了便於管理),客棧用顏色不一樣的紙來記錄房間號,這就有了不一樣類型的指針,好比藍色的char*這種指針只記錄單人間的房間號,紅色的int*只記錄四人間的。看起來分這麼多種類很混亂,可是若是有不少同類型的組團(數組)來住店時就方便了,上次int a[100]來旅遊的時候,就找到那一沓100張紅色的指針就能夠知道誰住哪裏了。好比團長a[0]的房間號記在第一張紙p上,那麼翻開下一頁(p++)你就找到了隔壁的房間號,你拿前四張去找人正好能夠湊一桌麻將了。 雖然指針分爲不少顏色(類型),可是無論多大的家族都只住一間屋子,只有一個房間號,因此不管什麼顏色的指針都具備相同的大小,長度就是房間號那麼長。 並不是全部人都像int a[100]那麼幸運,他們來的時候正好一層100個房間都沒人住,因而他們能夠住在同一片連續的區域。上次m, n, p, q, r一塊兒來想住連續的幾個屋子,方便一塊兒去玩,恰恰找不到合適的房間,只好m住3樓,n住5樓,…,總之都很遠。但是m總是來問老闆他的朋友們住哪裏?老闆每次要找半天,後來想了個辦法,把記錄這幾我的的指針用一個盒子*p[5](指針數組)放在一塊兒,這樣就方便多了。     有的客人脾氣很怪,好比char F[4],他們四個是一個樂隊的,但是又不肯住四人間,非要一人住一間,還必定是連着的,若是不連着就不住,老闆沒辦法,給他們找了連着的四間房。但是大牌還真是難纏,他們早上出去工做就退房,晚上又要回來住,老闆又要給他們找連續的四間房,每天如此,並且每次都浪費四個指針,客棧的成本一下提升了。老闆又想了個辦法,他專門爲這些人訂作了另外一種顏色的指針(*p)[4](指向數組的指針),他用這個指針記錄他們老大F[0]的房間號,剩下的三位房間號就是緊挨着的三間,減小了很多浪費。     一直忘了介紹客棧的兩個夥計,一個叫「小&」,另外一個叫」小*」,看外形就知道,」小*」比較圓滑,確定是常常可客人,而「小&」肚子比較大,一看就是常年打算盤,記賬不活動形成的。有時候有人來客棧找住店的人,首先要查找客人的房間,「小&」就是負責去取保存房間號的指針的,好比上面提到的m想找r去逛街,「小&」就去找r的指針了(&r), 「小&」找了半天,終於找到了r的指針p(p = &r),他把p交給」小*」, 」小*」就拿着p去叫客人了(*p就是r了)。看起來好像」小*」的工做比「小&」輕鬆,其實」小*」也不容易,他要區分指針的顏色(類型)來決定叫多少我的,好比拿的是藍色的指針(上面說得是char型),就只叫一個客人就能夠,若是是紅色的(int)就得叫4位客人,若是少叫了一位樓下找人得客人會生氣得,由於沒有把要找的人找全。     好了,這家客棧介紹完了,爲了感謝你看到這裏,如今客棧經營權就交給你了,但願你財源廣進!
相關文章
相關標籤/搜索