C語(yǔ)言:函數(shù)(上)-創(chuàng)新互聯(lián)

1.自定義函數(shù)

創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都做網(wǎng)站、巴楚網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開(kāi)發(fā)、巴楚網(wǎng)絡(luò)營(yíng)銷(xiāo)、巴楚企業(yè)策劃、巴楚品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供巴楚建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn

在數(shù)學(xué)當(dāng)中,我們學(xué)過(guò)很多函數(shù),如 三角函數(shù) y? = sin x,二次函數(shù) y = f(x)...它們都有一個(gè)共同特點(diǎn),即有參數(shù) x , 和經(jīng)過(guò)函數(shù) f(x) 運(yùn)算(處理)后的返回值 y,那么在C語(yǔ)言中的函數(shù)該如何編寫(xiě)呢?

事實(shí)上,C語(yǔ)言的函數(shù)編寫(xiě)也遵循這樣一個(gè)規(guī)律,即函數(shù)包含它的參數(shù),并且最多有且僅有一個(gè)函數(shù)的返回值,具體定義一個(gè)函數(shù)的操作就是:

返回值類(lèi)型 函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)3,...)

{

函數(shù)體語(yǔ)句1;

函數(shù)體語(yǔ)句2;

......

return 表達(dá)式(返回值)
} 注意:函數(shù)的定義結(jié)尾沒(méi)有分號(hào)。

這里,函數(shù)的返回值類(lèi)型可以是我們知道的各種數(shù)據(jù)類(lèi)型,例如int,char,float,double,long long等等,這些都是C語(yǔ)言自帶的數(shù)據(jù)類(lèi)型,當(dāng)然,還有一個(gè)比較特殊的類(lèi)型 void 它的意思是函數(shù)的返回值類(lèi)型為 “空” ,即函數(shù)可以返回一個(gè)空類(lèi)型,或者干脆沒(méi)有返回值。

例如:編寫(xiě)一個(gè)求取大值的函數(shù),經(jīng)過(guò)分析可知,我們要通過(guò)函數(shù)獲得一個(gè)大值,因此需要函數(shù)有一個(gè)返回值,所以函數(shù)返回值類(lèi)型不能為空(void),這里我們默認(rèn)要返回一個(gè)整型的大值,定義是這樣的:

int max(int a,int b)

{

if(a >b) return a;

return b;
}

這樣我們就實(shí)現(xiàn)了兩個(gè)整數(shù)求取大值的過(guò)程,這里有幾個(gè)點(diǎn)還需指明,例如,我們的函數(shù)只有兩個(gè)參數(shù),那如果我們要求三個(gè)數(shù)的大值或者四個(gè)數(shù)的大值甚至是五個(gè),六個(gè)等等,那我們是不是需要在函數(shù)的參數(shù)列表里再多定義幾個(gè) int c,int d,int e...呢?想了想那么復(fù)雜,所以顯然是不用的,為什么不用,這個(gè)問(wèn)題留在后期解答。還有一點(diǎn),就是關(guān)于這個(gè)函數(shù)體中的語(yǔ)句,我們看到函數(shù)體里面只有一個(gè) if 判斷語(yǔ)句,而沒(méi)有出現(xiàn)它的難兄難弟 else ,為什莫?其實(shí)關(guān)鍵就在于 return 語(yǔ)句,return 語(yǔ)句在函數(shù)體中是老大哥一樣的存在,為什莫這么說(shuō)呢,因?yàn)橐坏┖瘮?shù)執(zhí)行到return語(yǔ)句,函數(shù)就退出了,所以,在本函數(shù)體中,如果a >b 條件滿足,返回a,否則編譯器就不會(huì)執(zhí)行return a 這條語(yǔ)句,順序往下執(zhí)行,遇到return b,返回b的值,函數(shù)執(zhí)行完畢。但其實(shí)在return b,前面加上else 也是可以的,這里只是手懶而已。

提示:函數(shù)的參數(shù)和返回值類(lèi)型最好是我們 “常見(jiàn)的數(shù)據(jù)類(lèi)型” ,如int ,char double,當(dāng)然,后期認(rèn)識(shí)了指針,結(jié)構(gòu)體,類(lèi)等數(shù)據(jù)類(lèi)型也可以作為函數(shù)的參數(shù)和返回值,只不過(guò)它們的作為參數(shù)和返回值要相對(duì)復(fù)雜些,如果函數(shù)不要返回值,則返回值類(lèi)型應(yīng)該寫(xiě)為 void ,而不是空著返回值類(lèi)型,直接寫(xiě)函數(shù)名。

2.自定義函數(shù)的幾種類(lèi)型

1 返回值類(lèi)型 函數(shù)名(參數(shù)...){????? }??? 有返回值 有參數(shù)

2 返回值類(lèi)型 函數(shù)名(????????? ){?? ?? }??? 有返回值 無(wú)參數(shù)

3 void 函數(shù)名 (參數(shù)...)????????? {? ??? }??? 無(wú)返回值 有參數(shù)

4 void 函數(shù)名 (????????? )????????? {????? } ?? 無(wú)返回值 無(wú)參數(shù)

3.函數(shù)的聲明

當(dāng)我們定義了一個(gè)函數(shù),要去使用這個(gè)函數(shù)的時(shí)候,就需要對(duì)函數(shù)進(jìn)行調(diào)用,但有些情況下,即使我們已經(jīng)已經(jīng)在程序定義了這個(gè)函數(shù),但當(dāng)我們?nèi)ナ褂盟臅r(shí)候,程序有時(shí)會(huì)報(bào)錯(cuò)說(shuō)[Error] '函數(shù)名' was not declared in this scope,這個(gè)時(shí)候,往往是我們把函數(shù)定義在了主函數(shù)的后面,當(dāng)程序執(zhí)行到主函數(shù)里面的語(yǔ)句時(shí),程序不知道后面還有一個(gè)我們事先定義好的函數(shù),這時(shí)候,就用到了函數(shù)聲明,具體聲明形式時(shí)這樣的:返回值類(lèi)型 函數(shù)名 (參數(shù));將對(duì)應(yīng)代碼聲明語(yǔ)句像這樣在主函數(shù)中放在要調(diào)用該函數(shù)語(yǔ)句的前面,程序遇到該聲明語(yǔ)句就會(huì)在程序中尋找相關(guān)的函數(shù)定義,這樣一來(lái),函數(shù)就可以在主函數(shù)中正常使用了。當(dāng)然,有沒(méi)有一種方法可以讓我們省略函數(shù)的聲明語(yǔ)句呢?答案是可以的,我們只需要將函數(shù)的定義放在主函數(shù)前面就可以在主函數(shù)中不用聲明也可以直接調(diào)用了。

4.函數(shù)的參數(shù)傳遞

當(dāng)我們要使用一個(gè)帶有參數(shù)的自定義函數(shù)時(shí),我們必須傳遞給函數(shù)的形式參數(shù)一個(gè)實(shí)參,在上例

int max (int a,int b){? 函數(shù)體} 類(lèi)型中,a , b就是形式參數(shù),當(dāng)我們調(diào)用這個(gè)函數(shù)時(shí),需要傳遞給函數(shù)兩個(gè)實(shí)際參數(shù),多一個(gè)少一個(gè)都不行,比如我們有兩個(gè)變量 num1 = 10,num2 = 1;要對(duì)比兩個(gè)數(shù)的大小,就需要在程序中有這樣的語(yǔ)句:int c = max(num1,num2); c 用來(lái)接收num1,num2兩個(gè)數(shù)中的較大值,在這個(gè)過(guò)程當(dāng)中 num1的值傳遞給了 a ,num2 的值傳遞給了 b,這種參數(shù)之間的傳遞,就叫做參數(shù)的值傳遞,函數(shù)參數(shù)的傳遞類(lèi)型有三種,值傳遞,地址傳遞,引用傳遞,其中值傳遞只是簡(jiǎn)單的將實(shí)際參數(shù)的值復(fù)制給了形式參數(shù),這種參數(shù)之間值傳遞的方式中,形式參數(shù)和實(shí)際參數(shù)之間互不影響,即如果形式參數(shù)的函數(shù)值在函數(shù)體當(dāng)中有所改變,不會(huì)影響到主函數(shù)中的實(shí)際參數(shù)。

例如:現(xiàn)在我們需要編寫(xiě)一個(gè)函數(shù)來(lái)實(shí)現(xiàn)兩個(gè)變量之間的值交換。

#include

void swap(int a,int b)

{

int t = a;

a = b;

b = t;

}

int main()

{

int a = 3,b = 4;

swap(a,b);

printf("a = %d\nb = %d ",a,b);

}

可以看到,在我們事先定義的swap()函數(shù)中,我們將傳進(jìn)來(lái)的變量a 和 b 的值借助 t 變量進(jìn)行了交換,但當(dāng)我們運(yùn)行這段代碼后會(huì)發(fā)現(xiàn),主函數(shù)中打印的 a 和 b 的值依然是 3 和 4,這就是所謂的參數(shù)之間進(jìn)行了值傳遞,形式參數(shù)的改變不會(huì)影響主函數(shù)當(dāng)中的實(shí)際參數(shù)的值。那么怎么修改才能實(shí)現(xiàn)兩個(gè)實(shí)際參數(shù)之間的值交換呢,感興趣的同學(xué)可以去了解一下C語(yǔ)言指針部分的講解,由于我這里僅針對(duì)部分學(xué)基礎(chǔ)的同學(xué),所以這里我只給出代碼,不做過(guò)多解釋。

#includevoid swap(int * a,int * b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
int main()
{
    int a = 3,b = 4;

    swap(&a,&b);

    printf("a = %d\nb = %d",a,b);
    
    return 0;
}
?

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:C語(yǔ)言:函數(shù)(上)-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://muchs.cn/article22/deidcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站手機(jī)網(wǎng)站建設(shè)、企業(yè)建站虛擬主機(jī)、建站公司微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司