定義一個(gè)數(shù)組:
int a[5] = {1, 2, 3, 4, 5};
進(jìn)行如下操作:
a, &a, &a[0]
1.問:各代表什么?
答:
a 等價(jià)于 &a[0] 等價(jià)于 第0個(gè)元素的地址
&a 等價(jià)于 數(shù)組a的地址
2.再問:請(qǐng)指出它們之間的實(shí)際區(qū)別。
答:請(qǐng)看代碼:
顯示結(jié)果是:
&a 和 a 雖然數(shù)值一樣,但系統(tǒng)在系統(tǒng)看來就是不同的東西了
系統(tǒng)會(huì)偷偷地給 &a 標(biāo)記為:數(shù)組的地址
然后給 a 標(biāo)記為:元素的地址
就像外人分不清雙胞胎一樣,熟人卻可以分清楚哪個(gè)是哥哥,哪個(gè)是弟弟,因?yàn)樗麄円呀?jīng)在心里默默地給雙胞胎標(biāo)上了記號(hào)。
知識(shí)拓展:當(dāng)執(zhí)行下列操作的時(shí)候,會(huì)出現(xiàn)什么情況呢?
printf("%d/t%d/n", &a+1, (int*)&a+1);
發(fā)現(xiàn)結(jié)果和 上一句的一樣了!為什么呢?
因?yàn)?&a 原本在系統(tǒng)中是被標(biāo)記為 “數(shù)組的地址”,而且經(jīng)過(int*)強(qiáng)制轉(zhuǎn)換后,變成了 “整型變量的地址”。數(shù)組的地址自加,會(huì)跨越整個(gè)數(shù)組,即 4*5 = 20 個(gè)字節(jié),而整型變量的地址自加,只能跨越一個(gè)整型變量,即 1 個(gè)字節(jié).
當(dāng)然,我們也可以進(jìn)行 逆向操作。即
(int (*)[5])a+1
看!現(xiàn)在成功地把 a ---“元素的地址”, 轉(zhuǎn)化成了 “數(shù)組的地址”,這時(shí)它再自加,就不是自加一個(gè)整型變量了,而是一整個(gè)數(shù)組!
注意:(int *[5])a 和 (int (*)[5])a 是不同的!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
