例如*p2=*p1;實(shí)際上就是j=i;,前者不僅速度慢而且目的不明。但由于指針是變量,我們可以通過(guò)改變它們的指向, 以間接訪問(wèn)不同的變量,這給程序員帶來(lái)靈活性,也使程序代碼編寫(xiě)得更為簡(jiǎn)潔和有效。
指針變量可出現(xiàn)在表達(dá)式中, 設(shè)
int x, y *px=&x;
指針變量px指向整數(shù)x, 則*px可出現(xiàn)在x能出現(xiàn)的任何地方。例如:
y=*px+5; /*表示把x的內(nèi)容加5并賦給y*/
y=++*px; /*px的內(nèi)容加上1之后賦給y [++*px相當(dāng)于++(*px)]*/
y=*px++; /*相當(dāng)于y=*px; px++*/
二、地址運(yùn)算
指針允許的運(yùn)算方式有:
(1). 指針在一定條件下,可進(jìn)行比較,這里所說(shuō)的一定條件, 是指兩個(gè)指針指向同一個(gè)對(duì)象才有意義, 例如兩個(gè)指針變量p, q指向同一數(shù)組, 則<, >, >=,<=, ==等關(guān)系運(yùn)算符都能正常進(jìn)行。若p==q為真, 則表示p, q指向數(shù)組的同一元素; 若p (2). 指針和整數(shù)可進(jìn)行加、減運(yùn)算。設(shè)p是指向某一數(shù)組元素的指針,開(kāi)始時(shí)指向數(shù)組的第0號(hào)元素, 設(shè)n為一整數(shù), 則p+n就表示指向數(shù)組的第n號(hào)元素(下標(biāo)為n的元素)。不論指針變量指向何種數(shù)據(jù)類(lèi)型, 指針和整數(shù)進(jìn)行加、減運(yùn)算時(shí),編譯程序總根據(jù)所指對(duì)象的數(shù)據(jù)長(zhǎng)度對(duì)n放大, 在一般微機(jī)上, char放大因子為1, int、short放大因子為2, long和float放大因子為4, double放大因子為8。對(duì)于下面講述到的結(jié)構(gòu)或聯(lián)合, 也仍然遵守這一原則。
(3). 兩個(gè)指針變量在一定條件下,可進(jìn)行減法運(yùn)算。設(shè)p, q指向同一數(shù)組,則p-q的絕對(duì)值表示p所指對(duì)象與q所指對(duì)象之間的元素個(gè)數(shù)。其相減的結(jié)果遵守對(duì)象類(lèi)型的字節(jié)長(zhǎng)度進(jìn)行縮小的規(guī)則。
對(duì)于初學(xué)者而言,指針和地址以及指針和數(shù)組之間的關(guān)系都是非常讓人頭疼的概念。我說(shuō)了上面那么多,可能很多人還是一頭霧水。這就需要多看看一些書(shū)了。畢竟自己理解的東西永遠(yuǎn)比別人講解的要深刻。
下面舉一個(gè)例子,來(lái)看看指針的應(yīng)用:
main()
{
char c='A';
int i=123;
float f=3.45;
char *cp;
int *ip;
float *fp;
cp=&c;
ip=&i;
fp=&f;
printf(%c\n,*cp);
printf(%d\n,*ip);
printf(%f\n,*fp);
}
如果你們還對(duì)指針有不理解,可以再接著輸出cp,ip,fp的值看看,看它們到底是什么。
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言教程匯總計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言常見(jiàn)知識(shí)點(diǎn)總結(jié)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |