之前我們說(shuō)過(guò)指針和數(shù)組天生是聯(lián)系在一起的,因此兩者結(jié)合應(yīng)用在實(shí)際工程項(xiàng)目代碼中也用的比較廣泛,同時(shí)在很多面試中,面試官也喜歡問(wèn)“指針數(shù)組”和“數(shù)組指針”兩者的區(qū)別和應(yīng)用。因此今天我們就來(lái)講講這兩者的區(qū)別和用法。
指針數(shù)組和數(shù)組指針
指針數(shù)組:實(shí)質(zhì)是一個(gè)數(shù)組,指針是修飾詞,表明這個(gè)數(shù)組中存儲(chǔ)的內(nèi)容全部是指針變量
數(shù)組指針:實(shí)質(zhì)是一個(gè)指針,數(shù)組是修飾詞,表名這個(gè)指針指向的是一個(gè)數(shù)組
我們從以下幾個(gè)常見(jiàn)的表達(dá)式來(lái)分析:
int *p[5];int (*p)[5];int *(p[5]);
首先為了分析上面3個(gè)表達(dá)式, 我們需要說(shuō)明表達(dá)式中出現(xiàn)的運(yùn)算符(* 和 [])的優(yōu)先級(jí)。
C語(yǔ)言運(yùn)算符優(yōu)先級(jí)
從上面的圖中,我們可以看出優(yōu)先級(jí):[] > *
OK, 接下來(lái)我們開(kāi)始分析:
因?yàn)閇]的優(yōu)先級(jí)比*高,因此變量p先于[5]結(jié)合,故p是數(shù)組, 而int *就是修飾詞,總體就是p是一個(gè)數(shù)組,數(shù)組有5個(gè)元素,數(shù)組中的元素都是指針,指針指向的元素類型是int類型的;整個(gè)符號(hào)是一個(gè)指針數(shù)組。
因?yàn)?)的原因,p與*先結(jié)合,因此p是一個(gè)指針,然后再與[5]結(jié)合,此時(shí)的[5]并成了修飾詞;總體就是p是一個(gè)指針,指針指向一個(gè)數(shù)組,數(shù)組有5個(gè)元素,數(shù)組中存的元素是int類型; 整個(gè)符號(hào)是一個(gè)數(shù)組指針。
[]的優(yōu)先級(jí)本來(lái)就比*,再加上符號(hào)()的作用,p肯定先與[5]結(jié)合了,因此p是一個(gè)數(shù)組, int *是修飾詞,總體就是p是一個(gè)數(shù)組,數(shù)組有5個(gè)元素,數(shù)組中的元素都是指針,指針指向的元素類型是int類型的;這與第一種情況一致(其中運(yùn)算符()可有可無(wú)),整個(gè)符號(hào)是一個(gè)指針數(shù)組。
首先要知道一般規(guī)律:int *p;(p是一個(gè)指針); int p[5];(p是一個(gè)數(shù)組)
然后判斷核心(變量名p)與誰(shuí)先結(jié)合,如果核心和*結(jié)合,表示核心是指針;如果核心和[]結(jié)合,表示核心是數(shù)組(找結(jié)合);之后再向外擴(kuò)展(找修飾詞)。
聯(lián)系客服