指針的運(yùn)算實(shí)質(zhì)是地址的運(yùn)算。c語(yǔ)言有一套適用于指針、數(shù)組等地址運(yùn)算的規(guī)則,正是這套規(guī)則賦予了C語(yǔ)言出色的處理能力。
對(duì)于指針指向變量,能進(jìn)行基類(lèi)型數(shù)據(jù)所能進(jìn)行的全部運(yùn)算。
1.引用運(yùn)算
1)取地址運(yùn)算(&)
取地址運(yùn)算“&”,我們已非常熟悉。對(duì)指針變量進(jìn)行取地址運(yùn)算,可以得到指針變量本身的地址。
2)取內(nèi)容運(yùn)算(*)
取內(nèi)容運(yùn)算“*”,前稱(chēng)指針運(yùn)算,用于獲取地址數(shù)據(jù)對(duì)應(yīng)存儲(chǔ)單元的內(nèi)容。取內(nèi)容運(yùn)算的優(yōu)先級(jí)與取地址運(yùn)算優(yōu)先級(jí)相同,也為第2級(jí),結(jié)合性亦為右結(jié)合。對(duì)指針變量,進(jìn)行取內(nèi)容運(yùn)算可以得到指針變量所指向的數(shù)據(jù)。
取內(nèi)容運(yùn)算與取地址運(yùn)算實(shí)質(zhì)上是一對(duì)互逆運(yùn)算。例如:
int a, p=&a;
*(&a)就是a,&(*p)就是p;p指向a,*p與a等價(jià)。
2.算術(shù)運(yùn)算
指針變量可以進(jìn)行有限的算術(shù)運(yùn)算。
1)加減運(yùn)算
指針變量“加上”或“減去”一個(gè)整數(shù)n,相當(dāng)于指針變量加上或減去n個(gè)指針?biāo)赶驍?shù)據(jù)的存儲(chǔ)單位,即指針由當(dāng)前指向位置向后或向前移動(dòng)n個(gè)指針?biāo)赶驍?shù)據(jù)的存儲(chǔ)單位。
加減運(yùn)算常用于數(shù)組的處理。對(duì)指向一般數(shù)據(jù)的指針,加減運(yùn)算無(wú)實(shí)際意義。例如;
int a[10],*p=a,*x;
x=p+3;/*實(shí)際上是p加上3*2個(gè)字節(jié)賦給x,x指向數(shù)組的第三個(gè)分量*/
對(duì)于不同基類(lèi)型的指針,指針變量“加上”或“減去”一個(gè)整數(shù)n所移動(dòng)的字節(jié)數(shù)是不同的。例如:
float a[10],*p=a,*x;
p=p+3;/*實(shí)際上是p加上3*4個(gè)字節(jié)賦給x,x依然指向數(shù)組的第三個(gè)分量*/
2)自增自減運(yùn)算
指針變量自增、自減運(yùn)算具有上述運(yùn)算的特點(diǎn),但有前置后置、先用后用的考慮,務(wù)請(qǐng)小心。例如:
int a[10],*p=a,*x;
x=p++;/*x指向數(shù)組的第一個(gè)分量,p指向數(shù)組的第二個(gè)分量*/
x=++p;/*x、p均指向數(shù)組的第二個(gè)分量*/
*p++相當(dāng)于*(p++)。*(p++)與(*p)++含義不同,前者表示地址自增,后者表示當(dāng)前所指向的數(shù)據(jù)自增。
3)指針相減
指針相減得到兩指針之間數(shù)據(jù)的個(gè)數(shù),一般用于數(shù)組處理。
3.關(guān)系運(yùn)算
兩指針的關(guān)系運(yùn)算表示兩指針的先后位置關(guān)系,一般用于數(shù)組處理。除空指針外,不
能進(jìn)行指針與一般數(shù)值的關(guān)系運(yùn)算。