999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C語言中指針應用的常見問題

2010-12-31 00:00:00趙長青黃書童
考試周刊 2010年42期

摘 要: 指針的應用在C語言中既是重點又是難點,本文作者對指針使用中出現(xiàn)的常見問題作了簡要的歸納、分析、總結,希望能對C語言初學者起到一定的幫助作用。

關鍵詞: C語言 指針 應用 常見問題

指針是C語言中的一個重要概念,指針的應用也是C語言中最重要的一個內容。具有指針類型的變量(即指針變量)可以存放其他變量的地址,能有效地表示數(shù)據(jù)之間復雜的邏輯關系。正確而靈活地運用指針可以給程序設計帶來許多方便,比如可以有效地表示復雜的數(shù)據(jù)結構、動態(tài)分配內存、方便地使用字符串,在調用函數(shù)時能夠得到多于一個的和可以直接處理內存地址等。

能否正確理解和使用指針是我們是否掌握C語言的一個標志。但是由于指針太過靈活,一旦使用不當,不僅錯誤難查,而且會出現(xiàn)意想不到的錯誤。因此,要編出正確而高效的程序,必須正確地理解和使用指針。本文著重分析了指針應用中的若干常見問題,以幫助初學者更好地掌握指針。

一、指針變量在初始化時應注意的問題

1.“*”在使用時有不同的含義:在聲明變量時用在變量的前面,其作用是說明該變量為指針變量,其它情況用在指針變量前面作為指針運算符。

如:int *P,i=5;(*用在P前面,說明P為指針變量)

P=i;

printf(“%d\”,*P);(*用在P前面。作為指針運算符)

又如:int *p=1;等價于int *p;p=1;兩條語句的組合。

2.不能給未初始化的指針賦值。

main( )

{int i,*P;

i=5;

*P=8;

return 0;

}

指針在未初始化的時候,它的指向是不確定的,因此對它的運算是不正確的。也有可能會帶來“災難性”的后果,在使用指針前要使它有個確切的指向,在語句i=5和*P=8之間加一條語句P=i即可,這樣就讓指針變量P有了明確的指向。

二、指針變量在賦值時應注意的問題

1.給指針變量賦值必須是地址值[1],不能賦予任何其它數(shù)據(jù)。C語言中提供了地址運算符“”來表示變量的地址。其一般形式為:變量名;如a表示變量名a的地址。

例如:int b;int *p;p=b;此為正確的賦值方法。但有時會有如下錯誤書寫:int *p;p=156;這樣就使指針p指向了地址156(十進制),編譯時系統(tǒng)會提示出錯。

2.不同類型的指針不能相互賦值

指針是具有具體類型的,在給指針賦值時,不但要求是地址,而且應該是一個與該指針類型相符的變量或者常量的地址。

例如:“int *p;float a=3.4,*q=a;p=q;”以上語句中在“p=q;”這條語句上存在錯誤,因為p是一個整型指針,只能存放int型數(shù)據(jù)的地址,而q指向的是一個實數(shù)型變量,里面存放的是float型數(shù)據(jù)。二者不相匹配,因此在編譯時會發(fā)生錯誤。

三、指針變量用于數(shù)組時應注意的問題

1.數(shù)組名與指針變量的區(qū)別。指針常用于數(shù)組中,數(shù)組名代表數(shù)組的起始地址[2]。可將數(shù)組名賦給一個指針變量,即該指針變量指向了該數(shù)組,從而使得訪問數(shù)組可以采用地址法(訪問數(shù)組元素還可用下標法)。指向數(shù)組的指針變量可以作加減法的運算,且只有指向同一數(shù)組,兩個指針變量可作減法(結果為相隔的元素個數(shù))及關系運算。

如:int a[5]={1,2,3,4,5),*p;若有這樣的語句:for(p=a;p

2.使用指針法訪問數(shù)組元素時,要注意“下標是否越界”的問題。p+5表示a+4下面的一個整型單元。這樣會破壞有用的數(shù)據(jù),產(chǎn)生不應有的后果,嚴重地造成死機,c編譯系統(tǒng)并不指出“下標越界”這樣的錯誤。

3.使用指向數(shù)組元素的指針變量時,應注意指針變量的當前值。如p=a;for(i=0;i<5;i++)scanf(“%d”,p++)。若缺少“p=a;”這一語句,則p的值是一個不確定的值,它的指向不確定。有可能將輸入的5個數(shù)據(jù)輸入到難以預料的存儲單元中去,可能造成“災難性”的后果。

4.兩個指針相加產(chǎn)生錯誤。兩個指針是不能相加的。如果你的C程序試圖將兩個指針相加,譯程序就會發(fā)出警告。當你試圖將一個指針和另外兩個指針的差值相加的時候,你很可能會誤將其中的兩個指針相加。例如,你很可能會使用語句:p=p+p2-p1。這個語句是不正確的,因為它和語句p=(p1+p2)-pl完全相同,正確語句應該是:p=p+(p2-p1)。

四、指針變量用于函數(shù)時應注意的問題

函數(shù)的返回值不僅可以是一般的數(shù)據(jù)類型,還可以為指針類型,這種帶回的類型為指針的函數(shù)稱為指針函數(shù)[3]。對于函數(shù)帶回的指針,這個指針所指示的存儲單元必須是存在的,不可以不存在。例如:

int *max(int x,int y)

{int *p;

if(x>y)p=x;

else p=y;

return p;

}

main( )

{int a,b,*m;

scanf(“%d%d”,a,b);

m=max(a,b);

printf(“MAX=%d\”,*m);

}

max是指針函數(shù)。編寫該函數(shù)的本意是由指針P帶回x、y中較大數(shù)的地址,但函數(shù)max執(zhí)行完畢,返回主函數(shù)main時x、y所占用的存儲單元已被釋放,而P帶回的將是一個不存在的存儲單元,這樣做顯然是不正確的。因此,程序應該改為:

int *max(int *x,int *y)

{int *p;

if(*x>*y)p=x;

else p=y;

return p;

}

main( )

{int a,b,*m;

scanf(“%d%d”,a,b);

m=max(a,b);

printf(“MAX=%d\”,*m);

}

這樣修改后,max函數(shù)中的指針P帶回的則是主函數(shù)main中a,b兩者中較大數(shù)的地址,就可以正確輸出了。可見指針函數(shù)中帶回的指針應該是主調函數(shù)中變量的地址,不能是已釋放空間的地址。

熟練掌握指針可以編寫靈活的程序,但是誤用指針可能會造成嚴重的破壞,要透徹地理解,謹慎地使用指針,我們還需要在上機實踐中不斷地摸索、總結。

參考文獻:

[1]王聲決,羅堅.C語言程序設計[M].北京:中國鐵道出版社,2002.

[2]譚浩強,周海燕,馮玉山,崔武子等.C語言程序設計[M].北京:華夏出版社,2005.6.

[3]譚浩強.C語言程序設計[M].北京:清華大學出版社,2002.

主站蜘蛛池模板: 又爽又大又黄a级毛片在线视频| 久久精品这里只有精99品| 蜜桃臀无码内射一区二区三区 | 国产精品午夜福利麻豆| 好吊妞欧美视频免费| 国产美女91视频| 大陆精大陆国产国语精品1024 | 国产美女在线免费观看| 国产精品亚洲专区一区| 九色在线观看视频| 一区二区三区精品视频在线观看| 亚洲综合天堂网| 国产91无毒不卡在线观看| 欧美A级V片在线观看| 亚洲精品中文字幕午夜| 国产导航在线| 国产欧美视频综合二区| 国产精品成人免费视频99| 欧美日韩国产高清一区二区三区| 四虎国产在线观看| 一个色综合久久| 欧美国产日产一区二区| 午夜激情福利视频| 亚洲国产成人精品青青草原| 思思热在线视频精品| 日韩在线欧美在线| 五月天在线网站| 欧美日韩国产在线播放| 欧美一级特黄aaaaaa在线看片| 国产视频大全| 88av在线播放| 欧美中文字幕一区| 国产精品网址你懂的| 亚洲欧美一区二区三区麻豆| 国产99精品视频| 亚洲欧洲日产无码AV| 婷婷六月天激情| 国产凹凸视频在线观看| 色综合久久88| 亚洲区一区| 国产婬乱a一级毛片多女| 国产成人乱码一区二区三区在线| 4虎影视国产在线观看精品| 国语少妇高潮| 亚洲欧洲日韩综合| 九九热在线视频| 久久久久久久97| 亚洲床戏一区| 热99re99首页精品亚洲五月天| 69视频国产| 国产成人免费高清AⅤ| 亚洲aⅴ天堂| 国产伦精品一区二区三区视频优播| 国产不卡国语在线| 久久久久人妻一区精品| 国产成年女人特黄特色大片免费| 亚洲性影院| 97se亚洲综合| 成人福利在线视频| 天天躁狠狠躁| 欧美国产日韩在线| 91欧美亚洲国产五月天| 久久综合伊人 六十路| 午夜福利网址| 无码免费视频| 亚洲成人黄色网址| 国产h视频免费观看| 亚洲精品视频免费| 欧美日韩福利| 激情无码字幕综合| 91在线精品麻豆欧美在线| 亚洲三级成人| 国产精品成人第一区| 久久伊人操| 免费一看一级毛片| 亚洲国模精品一区| 麻豆精品在线播放| 欧美亚洲国产日韩电影在线| 天天躁夜夜躁狠狠躁躁88| 欧美精品在线看| 无码在线激情片| 国产精品精品视频|