為什么要寫(xiě)這個(gè)?因?yàn)檫@個(gè)東西有點(diǎn)混亂,至少我第一次接觸的時(shí)候是這樣的。或許以后還會(huì),所以記下來(lái)需要的人一起看吧。
直接上主題,我做事就是很直接,當(dāng)然也會(huì)很啰嗦,下面你將會(huì)一并體驗(yàn)到。
int count[2][3] = {{1,2,3},{4,5,6}};
count //數(shù)組count[0][0]的地址。
count+1//數(shù)組count[0][0]行數(shù)的偏移量為1的地址,即count[1][0]的地址。
*(count+1)//等效于count+1。
*(count+1)+1//count[0][0]行數(shù)偏移量為1,列數(shù)偏移量為1的地址,即count[1][1]的地址。
**(count+1)//count[1][0]的值。注意這里是2個(gè)“*”。
*(*(count+1)+1)//count[1][1]的值,這里也可以寫(xiě)成**(count+1)+1,結(jié)果都是一樣的,反正就是要2個(gè)“*”。說(shuō)到這里有的人可能就覺(jué)得奇怪了,上面不是說(shuō)了“*(count+1)//等效于count+1”那*(*(count+1)+1)能不能寫(xiě)成*((count+1)+1)呢?答案是很肯定的:不能。為什么呢?我的理解是:如果單純地表示行地址的時(shí)候有無(wú)“*”都無(wú)所謂,反正是一行的地址,同時(shí)也是一行的第一列元素的地址。*(*(count+1)+1)含義是先取得第1行的地址,然后再在第1行內(nèi)偏移1列后,取得地址所存儲(chǔ)的值4。如果寫(xiě)成*((count+1)+1)則含義變成:行數(shù)偏移1后再偏移1后的地址。
這里有點(diǎn)饒頭,多看幾次就會(huì)明白了。當(dāng)然按照我的理解來(lái)看也是有一定風(fēng)險(xiǎn)的,因?yàn)槲铱赡芾斫忮e(cuò)了。不過(guò)這些結(jié)果我都試驗(yàn)過(guò)的,絕對(duì)不會(huì)錯(cuò)的。
*(count+1)[1]//count[1][1]的值。首先用*(count+1)取得行地址,然后用[1]直接獲取這個(gè)地址中第1號(hào)元素的值。這個(gè)表達(dá)式等效于*(count[1]+1),同時(shí)也等效于*(*(count+1)+1)。~~撲通~~已經(jīng)有人徹底暈倒了。這里的“*(count+1)”,“count[1]”都是為了有效地進(jìn)行行地址定位,因?yàn)橹挥邢日业叫械刂凡拍苓M(jìn)列定位嘛!
最后總結(jié):
1. 如果你是想獲得多維數(shù)組中一行的地址則使用不使用“*”都無(wú)所謂。前提是沒(méi)有“[]”出現(xiàn)。
2. 如果你是想獲得多維數(shù)組中元素的地址則首先得確定好此元素的行地址(使用“*”,比如*(count+1)這樣就確定了是第1行的地址),然后再進(jìn)行列偏移。
3. 如果你是想獲得多維數(shù)組中元素的值,則可以在地址之前加“*”一般整個(gè)表達(dá)式是2個(gè)“*”,因?yàn)榇_定某一行的時(shí)候的那個(gè)“*”是必不可少的。當(dāng)然也可以使用帶有“[]”的方式,這個(gè)方式里面需一個(gè)“*”和一個(gè)“[]”就可以獲得數(shù)組的值。如果你說(shuō)使用count[1][1]這樣的方式不是更好么?你說(shuō)的一點(diǎn)都沒(méi)錯(cuò),不過(guò)我這里主要討論的是與地址相關(guān)的內(nèi)容。不過(guò)要順帶說(shuō)一下如果使用雙“[]”的情況下表達(dá)式前加不加“*”都是無(wú)所謂的。
再一次總結(jié):
1. 多維數(shù)組的地址中,重點(diǎn)就是進(jìn)行行地址定位,有2種方式,第一種:加“*”eg:*(count+1)。第二種:使用“[]”eg:count[1]。
這里有一個(gè)問(wèn)題啊,* count[1]是地址還是值啊?如果你的回答是地址那請(qǐng)?jiān)倩仡^看一下最后總結(jié)第一條。這里的* count[1]表示的是一個(gè)值,因?yàn)檫@條語(yǔ)句的含義是取count[1]的值,可是count[1]只是一個(gè)地址,只進(jìn)行了行定位,偏要它交出一個(gè)值出來(lái),只好把列排名第一的第0個(gè)元素丟了出來(lái),即count[1][0]。
學(xué)生朋友應(yīng)付考試的總結(jié):
1. 單個(gè)“*”或單個(gè)“[]”可以獲得地址;雙“*”或雙“[]”或一個(gè)“*”加上一個(gè)“[]”可以獲得數(shù)組值。這樣的規(guī)律是不是很簡(jiǎn)潔明了?
錯(cuò)誤不足之處還請(qǐng)大家多多指正!謝謝!