從四個(gè)屬性的角度來(lái)理解C語(yǔ)言的指針也許會(huì)更好理解

關(guān)于指針是什么潜支,很多教材已經(jīng)作出了定義丐吓,大多數(shù)都會(huì)定義為“存放變量?jī)?nèi)存地址的變量”。從這句話中我覺(jué)得除了讓我知道這個(gè)定義有11個(gè)字以外趟据,其他就沒(méi)什么用了券犁。我個(gè)人覺(jué)得要理解指針,不是光光說(shuō)一下是變量的地址就萬(wàn)事大吉了汹碱,而是要從多個(gè)屬性來(lái)解釋指針粘衬,為此,我個(gè)人總結(jié)了一個(gè)所謂的多維屬性法來(lái)理解指針咳促。

另外稚新,為了能把指針說(shuō)清楚,我認(rèn)為關(guān)鍵不在于用苦澀的文字描述等缀,而在于以示意圖的形式描述清楚指針的概念枷莉。我接下來(lái)就準(zhǔn)備用我的多維屬性法娇昙,加上畫幾張圖尺迂,和一些偽代碼,盡量說(shuō)清楚指針是什么冒掌。繪圖水平有限噪裕,技術(shù)水平也有限,歡迎多批評(píng)股毫。

1.要說(shuō)清楚指針是什么之前膳音,先來(lái)看看如何從多維屬性來(lái)理解普通變量,以及普通變量在內(nèi)存中是什么樣兒的铃诬。

比如現(xiàn)在有個(gè)整型變量:int a = 1;也就是說(shuō)整型變量a的值是1祭陷,在內(nèi)存中的存放如示意圖1所示:

從四個(gè)屬性的角度來(lái)理解C語(yǔ)言的指針也許會(huì)更好理解

相信朋友們對(duì)這張圖無(wú)任何異議,很簡(jiǎn)單嘛趣席,a就是1,1就是a嘛兵志。好了,我可以提煉出變量a的三個(gè)屬性出來(lái)宣肚,分別是有用數(shù)據(jù)的名字想罕,有用數(shù)據(jù)的值,有用數(shù)據(jù)的類型霉涨。

有用數(shù)據(jù)的名字按价,就是“a”;

有用數(shù)據(jù)的值笙瑟,就是“1”楼镐;

有用數(shù)據(jù)的類型,就是“int”往枷;

我之所以用“有用數(shù)據(jù)”這四個(gè)字來(lái)描述鸠蚪,是因?yàn)槌绦虼a中會(huì)經(jīng)常用到變量“a”今阳,以及它的值“1”,還有它的類型“int”茅信,那不就是有用的嘛盾舌,所以我就“有用數(shù)據(jù)”來(lái)描述變量a的三個(gè)屬性。好了蘸鲸,我用下面的表示法來(lái)表示變量a的這三個(gè)屬性:

變量a=(有用數(shù)據(jù)的名字妖谴,有用數(shù)據(jù)的值,有用數(shù)據(jù)的類型)

好了酌摇,假設(shè)變量a的地址是“0x380fe0”膝舅,則示意圖2是從變量a的地址的角度來(lái)看變量a在內(nèi)存中的存放形式:

從四個(gè)屬性的角度來(lái)理解C語(yǔ)言的指針也許會(huì)更好理解

在圖2中,我標(biāo)記出變量a的地址是16進(jìn)制的0x380fe0窑多,a為1仍稀,也就是在內(nèi)存地址為“0x380fe0”的地方放了一個(gè)值1。用C語(yǔ)言表示地址的術(shù)語(yǔ)來(lái)說(shuō)就是“&a”等于“380fe0”埂息〖寂耍“&”是表示變量地址的意思。這張圖相信朋友們也沒(méi)有什么異議千康,對(duì)吧享幽,都是很直觀的東西。好拾弃,我又可以提煉出變量a的第4個(gè)屬性值桩,叫做“有用數(shù)據(jù)的地址”,也就是“&a”啦豪椿。至此奔坟,變量a的四個(gè)屬性都齊全啦,如下:

變量a=(有用數(shù)據(jù)的地址搭盾,有用數(shù)據(jù)的名字咳秉,有用數(shù)據(jù)的值,有用數(shù)據(jù)的類型)增蹭,具體到本例滴某,就是:

變量a=(0x380fe0,a滋迈,1霎奢,int)

從四個(gè)屬性來(lái)說(shuō)明一般的整型變量在內(nèi)存中的樣兒,好了饼灿,下面我要放大招兒了幕侠,再說(shuō)說(shuō)從四個(gè)屬性來(lái)理解指針變量,以及指針變量在內(nèi)存中的樣兒碍彭。

我定義一個(gè)指針變量:

int *p = NULL;

p = 0x380fe0;

這兩句代碼朋友們也一定看的懂的晤硕,就是一個(gè)指針變量p的值用16進(jìn)制來(lái)表示就是“0x380fe0”悼潭,這正好是變量a的地址。p在內(nèi)存中的表示如下示意圖3:

從四個(gè)屬性的角度來(lái)理解C語(yǔ)言的指針也許會(huì)更好理解

示意圖3

示意圖3跟整型變量a的示意圖1沒(méi)任何區(qū)別舞箍,我也可以說(shuō)p就是0x380fe0舰褪,0x380fe0就是p,跟變量a就是1疏橄,1就是a是一個(gè)道理占拍。好,這里我提煉出指針p的第一個(gè)屬性捎迫,叫做“指針自己的值”晃酒,指針變量p的值是0x380fe0,可不就是自己的值嘛窄绒!用如下表示發(fā)來(lái)表示就是:

指針p=(指針自己的值)

到此為止贝次,朋友們應(yīng)該都是無(wú)異議的,好彰导,下面再來(lái)看“*p”是什么東西蛔翅,如下示意圖4所示:

從四個(gè)屬性的角度來(lái)理解C語(yǔ)言的指針也許會(huì)更好理解

示意圖4

指針變量p前面加個(gè)“”就變成了“p”。很多教材會(huì)說(shuō)“指針變量p指向的值是1”螺戳,這說(shuō)了等于沒(méi)說(shuō)搁宾,誰(shuí)看的懂折汞。加了星號(hào)后倔幼,p就是a的等價(jià)物了,是a的別名了爽待,也就是p就是a损同,a就是*p。這樣說(shuō)大家應(yīng)該都會(huì)看懂吧鸟款。好了膏燃,這里我可以提煉出指針變量p的剩余三個(gè)屬性了,分別叫做”與星號(hào)結(jié)合名“何什,”有用數(shù)據(jù)的值“组哩,”有用數(shù)據(jù)的類型“。

與星號(hào)結(jié)合名:就是”“與指針p結(jié)合处渣,變成p伶贰;

有用數(shù)據(jù)的值:就是1;跟變量a的第三個(gè)屬性一樣罐栈;

有用數(shù)據(jù)的類型黍衙,就是int;跟變量a的第四個(gè)屬性一樣荠诬。

這樣指針變量p的四個(gè)屬性也齊全了琅翻,如下:

指針變量p=(指針自己的值位仁,與星號(hào)結(jié)合名,有用數(shù)據(jù)的值方椎,有用數(shù)據(jù)的類型)聂抢。在本例就是:

指針變量p=(0x380fe0,*p棠众,1涛浙,int)。

3. 用變量a的四個(gè)屬性與指針變量p的四個(gè)屬性對(duì)比摄欲,一下子就能看出指針的本質(zhì)了轿亮。

我整理下上述的偽代碼:

int a = 1;//假設(shè)變量a的地址是0x380fe0

int *p = NULL;

p = &a;

再用我說(shuō)的多維屬性法分別來(lái)表示整型變量a和指針變量p,分別如下:

整型變量a=(有用數(shù)據(jù)的地址胸墙,有用數(shù)據(jù)的名字我注,有用數(shù)據(jù)的值,有用數(shù)據(jù)的類型)

指針變量p=(指針自己的值迟隅,與星號(hào)結(jié)合名但骨,有用數(shù)據(jù)的值,有用數(shù)據(jù)的類型)

在本例中智袭,它們各自的屬性就是:

整型變量a=(&a的值奔缠,a,1吼野,int)

指針變量p=(p的值校哎,*p,1瞳步,int)

再細(xì)一點(diǎn)闷哆,就是:

整型變量a=(0x380fe0,a单起,1抱怔,int)

指針變量p=(0x380fe0,*p嘀倒,1屈留,int)

看出來(lái)了嗎?看出來(lái)了嗎》看出來(lái)了嗎测蘑?它們的四個(gè)屬性的含義是一一等價(jià)的灌危,具體來(lái)說(shuō)就是:

”&a“ 就是 ”p“.

”a“就是 ”*p“

”1“ 就是 ”1“

”int“ 就是 ”int“

這才是理解指針p的本質(zhì)關(guān)鍵所在。

關(guān)于”&a“ 就是 ”p“我再說(shuō)兩句帮寻。同樣是表示地址乍狐,”&a“是用了”&“和”a“兩個(gè)字符的組合來(lái)表示的,而”p“就用了一個(gè)字符”p"來(lái)表示固逗,這種字符數(shù)量上的不一致導(dǎo)致了很多人學(xué)指針時(shí)會(huì)犯暈浅蚪!

關(guān)于”a“就是 ”p“我也說(shuō)兩句藕帜。同樣是表示整型變量的名字,這次”a“就用了一個(gè)字符”a“來(lái)表示惜傲,而”p“用了字符“*”和”p"兩個(gè)字符來(lái)表示洽故,又是這種字符數(shù)量上的不一致又導(dǎo)致了很多人學(xué)指針時(shí)會(huì)犯暈!

說(shuō)了這么多廢話盗誊,其實(shí)就是為了說(shuō)明指針變量的四個(gè)屬性表示法时甚,建議記住這四個(gè)屬性表示法,以及與一般整型變量哈踱、字符變量等一般變量類型的四個(gè)屬性之間的等價(jià)關(guān)系荒适。當(dāng)然了,別指望記住這四個(gè)屬性你就理解指針了开镣,該學(xué)習(xí)的還是要學(xué)習(xí)刀诬,該多寫代碼的還是要多寫代碼,我只是希望你記住四個(gè)屬性后再學(xué)習(xí)指針時(shí)邪财,不至于被指針碾壓的那么慘陕壹。

對(duì)于第二個(gè)屬性,在本文中树埠,就是一個(gè)“”和“p”的結(jié)合“p”糠馆,別看它是由兩個(gè)字符組成的,其實(shí)本質(zhì)上就是變量“a”怎憋,因此從這一個(gè)屬性開(kāi)始又碌,你完全可以用一般的整型變量“a”來(lái)思考問(wèn)題了,也就是直接將“*p”看做“a”盛霎,后面的第3個(gè)屬性就是這個(gè)“a”的值“1”赠橙,第4個(gè)屬性就是“a”的類型“int”耽装。記住愤炸,從第2個(gè)屬性開(kāi)始,就與指針p沒(méi)有任何關(guān)聯(lián)了掉奄,你全部使用整型變量a的思維去思考問(wèn)題规个。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市姓建,隨后出現(xiàn)的幾起案子诞仓,更是在濱河造成了極大的恐慌,老刑警劉巖速兔,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墅拭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡涣狗,警方通過(guò)查閱死者的電腦和手機(jī)谍婉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門舒憾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人穗熬,你說(shuō)我怎么就攤上這事镀迂。” “怎么了唤蔗?”我有些...
    開(kāi)封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵探遵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我妓柜,道長(zhǎng)箱季,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任棍掐,我火速辦了婚禮规哪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘塌衰。我一直安慰自己诉稍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布最疆。 她就那樣靜靜地躺著杯巨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪努酸。 梳的紋絲不亂的頭發(fā)上服爷,一...
    開(kāi)封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音获诈,去河邊找鬼仍源。 笑死,一個(gè)胖子當(dāng)著我的面吹牛舔涎,可吹牛的內(nèi)容都是我干的笼踩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼亡嫌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嚎于!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起挟冠,我...
    開(kāi)封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤于购,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后知染,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肋僧,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嫌吠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伪窖。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖居兆,靈堂內(nèi)的尸體忽然破棺而出覆山,到底是詐尸還是另有隱情,我是刑警寧澤泥栖,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布簇宽,位于F島的核電站,受9級(jí)特大地震影響吧享,放射性物質(zhì)發(fā)生泄漏魏割。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一钢颂、第九天 我趴在偏房一處隱蔽的房頂上張望钞它。 院中可真熱鬧,春花似錦殊鞭、人聲如沸遭垛。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锯仪。三九已至,卻和暖如春趾盐,著一層夾襖步出監(jiān)牢的瞬間庶喜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工救鲤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留久窟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓本缠,卻偏偏與公主長(zhǎng)得像斥扛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搓茬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容