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