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