#include
淺析c語言的函數(shù)調(diào)用

淺析c語言的函數(shù)調(diào)用

ID:9357486

大?。?7.50 KB

頁數(shù):13頁

時間:2018-04-28

淺析c語言的函數(shù)調(diào)用_第1頁
淺析c語言的函數(shù)調(diào)用_第2頁
淺析c語言的函數(shù)調(diào)用_第3頁
淺析c語言的函數(shù)調(diào)用_第4頁
淺析c語言的函數(shù)調(diào)用_第5頁
資源描述:

《淺析c語言的函數(shù)調(diào)用》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、淺析c語言的函數(shù)調(diào)用C語言中的函數(shù)調(diào)用形式差別在形參的不同或是返回類型的不一樣,下面來談一下這些函數(shù)。第一種也是最簡單的一種:請看下面例子:/*該函數(shù)實(shí)現(xiàn)比較兩個值的大小*/#include#includeintcompare(intx,inty){intz;if(x>=y)z=1;elsez=0;returnz;}intmain(void){intx,y,z;printf("pleaseinputthexandy!");scanf("%d%d",&x,&y);z=compare(x,y);p

2、rintf("%d",z);returnEXIT_SUCCESS;}這個函數(shù)知識簡單比較x,y的值,將x,y傳遞給compare函數(shù),而后返回z值。這里講一下函數(shù)傳遞的兩個規(guī)則:1、函數(shù)之間的調(diào)用關(guān)系是傳值調(diào)用的;2、對于指針或是數(shù)組名傳遞的參數(shù)則是傳址調(diào)用的,但這第一條不矛盾。具體在下面講。對于規(guī)則1的解釋是調(diào)用程序傳遞的是變量或?qū)崊⒌囊环菘截?,給被調(diào)用程序的是一份復(fù)制品,這樣被調(diào)用的函數(shù)才不致于隨便改動調(diào)用程序的數(shù)據(jù)(這也有例外)。下面是例子程序://該函數(shù)原本是打算實(shí)現(xiàn)交換兩個值的,結(jié)果實(shí)現(xiàn)不了!#include

3、.h>#includeintswap(intx,inty){inttemp;temp=x;x=y;y=temp;}intmain(void){intx,y;printf("pleaseinputthexandy!");scanf("%d,%d",&x,&y);swap(x,y);printf("%d,%d",x,y);returnEXIT_SUCCESS;}試運(yùn)行這個程序,你會發(fā)現(xiàn),打印出來的仍是x,y的原值,調(diào)用函數(shù)沒有起到任何作用,或是說程序并沒有達(dá)到你所想的效果。這就印證了剛才所說的傳值是實(shí)參的一份拷

4、貝而已!第二種是傳遞的參數(shù)是指針,請看下面例程:/*該函數(shù)實(shí)現(xiàn)兩個數(shù)交換其值*/#include#includeintswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}intmain(void){intx,y;/*定義兩個指針變量指向x與y*/int*p=&x,*q=&y;printf("pleaseinputthexandy!");scanf("%d,%d",&x,&y);/*注意這里的調(diào)用形式,必須加上這個"&"符號*/swap(&x,&y)

5、;printf("%d,%d",x,y);returnEXIT_SUCCESS;}這個程序時對上面程序的改進(jìn)或者說是糾正,這樣x,y才能交換其值??墒悄阋苍S會問這時為什么呢?僅僅改變?yōu)橹羔樞问骄涂梢詥??是的,讓我慢慢道來:這確實(shí)是剛才所說的一份拷貝,但現(xiàn)在拷貝的是一份指針,就是指向x,y的指針,但是通過swap函數(shù)里的卻可以間接訪問在主函數(shù)里的x,y的值,所以也就可以修改主函數(shù)的值了,但這時主函數(shù)的指針值確實(shí)改變不了的,因?yàn)橹骱瘮?shù)僅僅是傳遞了一份拷貝,任憑swap函數(shù)這么修改這份指針,始終改不了主函數(shù)的指針?,F(xiàn)在明白了嗎?第三種:

6、傳遞的是數(shù)組名,請看下面的例程:/*該函數(shù)實(shí)現(xiàn)將某一字符串中的小寫改為大寫字母,其余的不變*/#include#includevoidchange(char*string){inti=0;/*記住這種寫法“*(string+i)”*/while(*(string+i)!=''){if(*(string+i)>='a'&&*(string+i)<='z')*(string+i)-=32;i+=1;}}intmain(void){charstring[1000]={"Hello,myworld!"

7、};change(string);printf("%s",string);returnEXIT_SUCCESS;}這種就和上面的第二種情況很類似,傳遞給change函數(shù)的是一個指向字符數(shù)組首元素的指針的拷貝,仿佛是通過傳址調(diào)用的,但實(shí)際上和剛才說的,盡管傳遞的是指針拷貝,但還是能改變主函數(shù)的數(shù)據(jù)。對于被調(diào)用函數(shù)頭還可以用這種表達(dá)方式:voidchange(charstring[])。對于被調(diào)用函數(shù)的調(diào)用形式應(yīng)該是程序所寫的那樣,而不應(yīng)該寫成change(charstring),這樣gcc環(huán)境下編譯會出現(xiàn)這樣的“taioshi.c:

8、17:parseerrorbefore"char"”提示錯誤。順便提一下,在change函數(shù),出現(xiàn)了const關(guān)鍵詞,這里有一個細(xì)微的表達(dá)差別:charconst*string與char*conststring,前者是指

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。