C語(yǔ)言指針學(xué)多了,為什么你會(huì)暈乎乎的?
來(lái)源:程序員人生 發(fā)布時(shí)間:2017-02-20 09:41:38 閱讀次數(shù):3529次
對(duì)C語(yǔ)言中的指針概念,如果我告知你,它是1個(gè)地址變量,你聽(tīng)了1頭霧水,“地址?啥意思?”見(jiàn)你不理解,我說(shuō)的詳細(xì)點(diǎn)“指針變量跟其他變量1樣,存儲(chǔ)的是1個(gè)地址”。你想了想,“跟其他變量1樣?其他變量寄存的是數(shù)值,變量有地址....指針變量寄存的是地址,地址里有個(gè)值.....”你又暈掉了!沒(méi)辦法,我找了專(zhuān)業(yè)教材,找到教材上對(duì)指針的定義“指針是1個(gè)變量,存儲(chǔ)的另外一個(gè)變量的地址,也就是另外一個(gè)變量所在的內(nèi)存位置的首地址。”你轉(zhuǎn)了轉(zhuǎn)大眼睛,依然1頭懵逼!
好吧,看來(lái)傳統(tǒng)的解釋會(huì)讓你1直暈下去,那我不解釋了,本篇文章我不解釋甚么叫指針了,我就重點(diǎn)說(shuō)下為何指針會(huì)讓你暈,指出讓你暈的根本緣由,或許你知道了就不暈了呢?
我們先來(lái)看1個(gè)很簡(jiǎn)單的變量定義:
int a = 1;
a是1個(gè)整型變量,它的值是1,對(duì)這么簡(jiǎn)單的1個(gè)變量,你鐵定地絕對(duì)地1定地不會(huì)暈,a就是1,1就是a嘛,簡(jiǎn)單、清晰、明了!
畫(huà)個(gè)圖來(lái)看下:
好了,下面我們?cè)俣x1個(gè)指針變量p:
#include "stdio.h"
#include "stdlib.h"
int main()
{
int *p = NULL;
p = (int *) malloc (sizeof(int)); //為指針變量p申請(qǐng)1段內(nèi)存地址
printf("指針p的值是%x\n", p);
*p = 2;//上述申請(qǐng)的內(nèi)存地址寄存的數(shù)值是2
printf("指針p指向的值是%d\n", *p);
free(p);
p = NULL;
return 0;
}
我們先看下運(yùn)行結(jié)果:
p的值是“380fe0”,指向的值是2。你看到這個(gè)后,你會(huì)想“剛才變量a和1好理解,a就是1,1就是a。現(xiàn)在有p,380fe0,23個(gè)東東,p就是380fe0?那p跟2是啥關(guān)系?380fe0跟2又是啥關(guān)系?對(duì)了,好像還有個(gè)*p這個(gè)東東,又是甚么關(guān)系?完了,我暈了!!”現(xiàn)在我可以指出,在理論上,你指針學(xué)多了暈的根本緣由就在以下兩點(diǎn):
1.有4個(gè)東西:p,*p,380fe0和2,比剛才的a和1硬生生多了兩個(gè)東西,使得你大腦思考時(shí)多了兩個(gè)需要思考的對(duì)象,增加了你大腦思考的負(fù)擔(dān);
2.這4個(gè)東西:p,*p,380fe0和2中,只有p、*p、2會(huì)被程序代碼所使用,380fe01般用不到,但是你又必須時(shí)時(shí)刻刻記著這個(gè)380fe0,又再次增加你大腦思考的負(fù)擔(dān);
好了,我再用1張圖來(lái)形象地解釋你會(huì)暈的緣由:

與a和1的那張圖對(duì)照,形象上來(lái)講你指針學(xué)多了暈的根本緣由又在以下3點(diǎn):
1.你傳統(tǒng)思惟是a就是1,1就是a。但在指針變量來(lái)看,p就不是2,2也不是p了。p是啥?p就是380fe0,380fe0就是p。注意,你的傳統(tǒng)思惟開(kāi)始第1次被顛覆,接著看:
2.那誰(shuí)就是2,2就是誰(shuí)呢?答案就在于*p就是2,2就是*p。出現(xiàn)了*p,你的傳統(tǒng)思惟第2次被顛覆,哈哈;
3.那p和*p啥關(guān)系?二者長(zhǎng)的好像啊,就是多了1個(gè)*的區(qū)分。你的傳統(tǒng)思惟開(kāi)始第3次被顛覆。到這里,你基本上已暈了;
那末,在學(xué)指針,用指針時(shí),如何做到不暈?zāi)兀砍煤枚鄬W(xué)習(xí)多思考外,我教你3招:
1.看到指針變量時(shí),立即拋棄你的a就是1,1就是a的傳統(tǒng)思惟,開(kāi)始想到p,*p,380fe0和2這4個(gè)東東,不然你會(huì)思考的很痛苦;
2.牢記p與380fe0是1家,*p與2是1家;
3.記住p與2是遠(yuǎn)方親戚,p與2要通過(guò)*p來(lái)聯(lián)系;*p與380fe0是遠(yuǎn)方親戚,*p脫掉*就和380fe0是1家了。
這篇文章主要是分析指針學(xué)習(xí)讓你頭暈的緣由,文字表述可能其實(shí)不嚴(yán)謹(jǐn),請(qǐng)見(jiàn)諒!
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)