国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言中的函數(shù)(超詳細(xì))

這篇具有很好參考價(jià)值的文章主要介紹了C語言中的函數(shù)(超詳細(xì))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

  • ??個人主頁:庫庫的里昂
  • ??CSDN新晉作者
  • ??歡迎 ??點(diǎn)贊?評論?收藏
  • ?系列專欄C語言初階、代碼小游戲
  • ??希望作者的文章能對你有所幫助,有不足的地方請?jiān)谠u論區(qū)留言指正,大家一起學(xué)習(xí)交流!??

【前言】

函數(shù)是指將一組能完成一個功能或多個功能的語句放在一起的代碼結(jié)構(gòu)。在C語言程序中,至少會包含一個函數(shù),及主函數(shù)main()。本章將詳細(xì)講解關(guān)于函數(shù)的相關(guān)內(nèi)容。

一、函數(shù)概述

我們都知道函數(shù)是數(shù)學(xué)里的重要組成部分,數(shù)學(xué)中我們常見到函數(shù)的概念,但是你了解C語言中的函數(shù)嗎?
其實(shí)函數(shù)就相當(dāng)于一個子程序,那什么是子程序呢?

  • 在計(jì)算機(jī)科學(xué)中,子程序是一個大型程序中的某部分代碼, 由一個或多個語句塊組成。它負(fù)責(zé)完成某項(xiàng)特定任務(wù),而且相較于其他代 碼,具備相對的獨(dú)立性。
  • 一般會有輸入?yún)?shù)并有返回值,提供對過程的封裝和細(xì)節(jié)的隱藏。這些代碼通常被集成為軟件庫。

二、C語言中函數(shù)的分類

1.庫函數(shù)

1.1什么是庫函數(shù)?

其實(shí)庫函數(shù)就是存放在函數(shù)庫中的函數(shù),具有明確的功能、入口調(diào)用參數(shù)和返回值。下面舉一些例子:

  1. 我們知道在我們學(xué)習(xí)C語言編程的時候,總是在一個代碼編寫完成之后迫不及待的想知道結(jié)果,想把這個結(jié)果打印到我們的屏幕上看看。這個時候我們會頻繁的使用一個功能:將信息按照一定的格式打印到屏幕上(printf)。
  2. 在編程的過程中我們會頻繁的做一些字符串的拷貝工作(strcpy)。
  3. 在編程是我們也計(jì)算,總是會計(jì)算n的k次方這樣的運(yùn)算(pow)。

1.2庫函數(shù)是C語言提供的嗎?

不是,C語言標(biāo)準(zhǔn)中約定好,由編譯器的廠商提供實(shí)現(xiàn)。

1.3為什么會有庫函數(shù)呢?

像上面我們描述的基礎(chǔ)功能,它們不是業(yè)務(wù)性的代碼。我們在開發(fā)的過程中每個程序員都可能用的到,為了支持可移植性和提高程序的效率,所以C語言的基礎(chǔ)庫中提供了一系列類似的庫函數(shù),方便程序員
進(jìn)行軟件開發(fā)。

1.4那怎么學(xué)習(xí)庫函數(shù)呢?

我們在開發(fā)的過程中每個程序員都可能用的到,為了支持可移植性和提高程序的效率,所以C語言的基礎(chǔ)庫中提供了一系列類似的庫函數(shù),方便程序員進(jìn)行軟件開發(fā)。

這里我給大家推薦一個可以很好查到有關(guān)庫函數(shù)的網(wǎng)站鏈接:可查到庫函數(shù)資料

簡單的總結(jié),C語言常用的庫函數(shù)都有:

  • IO函數(shù)
  • 字符串操作函數(shù)
  • 字符操作函數(shù)
  • 內(nèi)存操作函數(shù)
  • 時間/日期函數(shù)
  • 數(shù)學(xué)函數(shù)
  • 其他庫函數(shù)

注!?。?br>庫函數(shù)必須知道的一個秘密就是:使用庫函數(shù),必須包含 #include 對應(yīng)的頭文件。

2.自定義函數(shù)

如果庫函數(shù)能干所有的事情,那還要程序員干什么?
所有更加重要的是自定義函數(shù)?。?!
自定義函數(shù)和庫函數(shù)一樣,有函數(shù)名,返回值類型和函數(shù)參數(shù)。
所謂自定義就是這些都是我們自己來設(shè)計(jì)。這給我們自己一個很大的發(fā)揮空間!?。?/font>

函數(shù)的組成:
我們舉一個例子:寫一個函數(shù)可以找出兩個整數(shù)中的最大值。

#include <stdio.h>
//get_max函數(shù)的設(shè)計(jì)
int get_max(int x, int y)
{
	return (x > y) ? (x) : (y);//三目運(yùn)算符:x大于y返回x,x小于y返回y
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int max = get_max(num1, num2);
	printf("max = %d\n", max);
	return 0;
}

這里我們輸入a=10 b=20結(jié)果是
C語言中的函數(shù)(超詳細(xì)),C語言初階,c語言,數(shù)據(jù)庫,開發(fā)語言
正確的,說明我們自己定義的函數(shù)還是比較成功的哈??
上面可以看到,我們定義的一個函數(shù)get_max()是為了得到一個最大值,而get max也能理解為這個意思,由此可以看出咱們在定義函數(shù)的時候取的名字盡量要有意義,不然別人讀你的代碼根本不知道你這寫的什么函數(shù),你要知道,我們寫代碼是要給別人看的,你總不能寫個亂七八糟的函數(shù),讓你寫東你寫個西在上面,你讓別人怎么看呀,是不是。所以還是要考慮別人的感受!??!
扯遠(yuǎn)了哈,咱們繼續(xù)

三、函數(shù)的參數(shù)

1.實(shí)際參數(shù)(實(shí)參)

  • 真實(shí)傳給函數(shù)的參數(shù),叫實(shí)參。

比如上面的例子:get_max(num1, num2)中num1和num2就是實(shí)參

  • 實(shí)參可以是:常量、變量、表達(dá)式、函數(shù)等。

get_max(3, 5)
get_max(num1, 8)
get_max(num1, 8+2)
get_max(num1, get_max(3,5))//鏈?zhǔn)浇Y(jié)構(gòu),后面我們會講到

  • 無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。

就是實(shí)參不能是變量

2.形式參數(shù)(形參)

形式參數(shù)是指函數(shù)名后括號中的變量,因?yàn)樾问絽?shù)只有在函數(shù)被調(diào)用的過程中才實(shí)例化(分配內(nèi)存單元),所以叫形式參數(shù)。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動銷毀了。因此形式參數(shù)只在函數(shù)中有效。

比如上面中的get_max(int x, int y),其中xy就是形式參數(shù)。
我們可以簡單的認(rèn)為:形參實(shí)例化之后其實(shí)相當(dāng)于實(shí)參的一份臨時拷貝。

四、函數(shù)的調(diào)用

1.傳值調(diào)用

函數(shù)的形參和實(shí)參分別占有不同內(nèi)存塊,對形參的修改不會影響實(shí)參。
比如get_max()函數(shù),它只是求出兩個數(shù)中的最大值,沒有改變參數(shù)內(nèi)部的數(shù)值,所以用的是傳值調(diào)用。

2.傳址調(diào)用

  • 傳址調(diào)用是把函數(shù)外部創(chuàng)建變量的內(nèi)存地址傳遞給函數(shù)參數(shù)的一種調(diào)用函數(shù)的方式。
  • 這種傳參方式可以讓函數(shù)和函數(shù)外邊的變量建立起真正的聯(lián)系,也就是函數(shù)內(nèi)部可以直接操作函數(shù)外部的變量。

舉個例子:交換兩個數(shù)的值

void Swap2(int*p1, int*p2)
{
	int tmp = 0;
	tmp = *p1;//tmp = a;
	*p1 = *p2;//a = b;
	*p2 = tmp;//b = tmp;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("交換前:a = %d b = %d\n", a, b);
	Swap2(&a, &b);
	printf("交換后:a = %d b= %d\n", a, b);
	return 0;
}

這里我們輸入a=10 b=20
C語言中的函數(shù)(超詳細(xì)),C語言初階,c語言,數(shù)據(jù)庫,開發(fā)語言
說明我們定義的函數(shù)是對的,但是我們看上面Swap(&a,&b)中使用的是取地址a和取地址b,這是為什么呢?為什么不用Swap(a,b)呢?

好好好,這么問是吧,那我就只好回答你了!

因?yàn)槲覀冃枰氖墙粨Qa、b的值,僅僅使用傳值調(diào)用的話只能改變實(shí)參的表面數(shù)值,而實(shí)參內(nèi)部沒有被傳到形參,當(dāng)形參執(zhí)行函數(shù)時只帶上了實(shí)參的數(shù)值,而形參內(nèi)部還是形參本身,那么雖然輸出的結(jié)果是符合要求的,但是內(nèi)部功能可能會有差異。所以我們采用傳址調(diào)用,這樣我們把a(bǔ)、b的地址傳到形參里面,形參就能根據(jù)地址輸出我們想要的效果。這么說,你該懂了吧!那么能否奉上閣下的一件三連呢!不要辜負(fù)我的一番苦心?。。?!

五、函數(shù)的嵌套調(diào)用和鏈?zhǔn)皆L問

1.嵌套調(diào)用

假如我們需要定義兩個函數(shù),分別為x函數(shù)和y函數(shù)

void x()
{
	
}
void y()
{
	x();
}
int main()
{
	y();
}

我只是舉個例子來表示嵌套調(diào)用,你們可不要這么寫哈。
注意?。。?br> 函數(shù)可以嵌套調(diào)用,但是不能嵌套定義。

2.鏈?zhǔn)皆L問

把一個函數(shù)的返回值作為另外一個函數(shù)的參數(shù)

回到我們上面講到的一個例子:get_max(num1, get_max(3,5)),這就是鏈?zhǔn)浇Y(jié)構(gòu),以此類推可以放很多個函數(shù)在另一個函數(shù)的參數(shù)上面。

六、函數(shù)的聲明和定義

1.函數(shù)聲明

  • 告訴編譯器有一個函數(shù)叫什么,參數(shù)是什么,返回類型是什么。但是具體是不是存在,函數(shù)
    聲明決定不了。
  • 函數(shù)的聲明一般出現(xiàn)在函數(shù)的使用之前。要滿足先聲明后使用。
  • 函數(shù)的聲明一般要放在頭文件中的。
    其實(shí)就是在使用函數(shù)前應(yīng)該加上函數(shù)聲明

例:

int get_max(int x, int y);//<font color = green>函數(shù)聲明
int main()
{
	get_max(a,b);
}

加在最上面或者get_max(a,b)上面都可以。

2. 函數(shù)定義

函數(shù)的定義是指函數(shù)的具體實(shí)現(xiàn),交待函數(shù)的功能實(shí)現(xiàn)。

例:

int get_max(int x, int y)
{
	return (x > y) ? (x) : (y);//三目運(yùn)算符:x大于y返回x,x小于y返回y
}

這就是函數(shù)定義。

學(xué)習(xí)了函數(shù)聲明和函數(shù)定義以后,我們是不是就知道怎么使用函數(shù)了,好,那我們就來寫一道題:寫一個函數(shù),完成2個整數(shù)的相加
這里我們可以創(chuàng)建一個函數(shù)Add(),它要完成兩個數(shù)相加,那么函數(shù)就可已定義為:

int Add(int x, int y)
{
	return x + y;
}

函數(shù)聲明為:

int Add(int x, int y);

那么我們就可以開始寫這個程序,代碼就是

#include<stdio.h>
int Add(int x, int y)
{
	return x + y;
}
int Add(int x, int y);
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int ret = Add(a, b);
	printf("%d\n", ret);
	return 0;
}

輸入a=10 b=20
運(yùn)行結(jié)果:
C語言中的函數(shù)(超詳細(xì)),C語言初階,c語言,數(shù)據(jù)庫,開發(fā)語言
到這里你是不是覺得沒什么問題,確實(shí)沒什么問題哈。
但事實(shí)上,在工程里面是這樣用的嗎?
如果你只是寫一個文件的話,這樣寫是沒有任何問題的。
但是我們未來在工程中,代碼是比較多的,如果還是用我們上面這種方法的話,那可就太繁瑣了,所以,我們的函數(shù)一般是放在.h文件中聲明,在.c文件中實(shí)現(xiàn)的!

下面我給大家來演示一遍(VS2019)

  1. 新建一個頭文件add.h
    C語言中的函數(shù)(超詳細(xì)),C語言初階,c語言,數(shù)據(jù)庫,開發(fā)語言
    因?yàn)轭^文件是進(jìn)行函數(shù)的聲明,所以在頭文件中輸入函數(shù)聲明

C語言中的函數(shù)(超詳細(xì)),C語言初階,c語言,數(shù)據(jù)庫,開發(fā)語言

  1. 新建兩個源文件add.c和test.c
    C語言中的函數(shù)(超詳細(xì)),C語言初階,c語言,數(shù)據(jù)庫,開發(fā)語言
    add.c里面用來定義我們的函數(shù)

C語言中的函數(shù)(超詳細(xì)),C語言初階,c語言,數(shù)據(jù)庫,開發(fā)語言

test.c是我們自己輸入跑程序要用的代碼

當(dāng)我們需要用到Add()函數(shù)時,只要在前面加上一個#include"add.h"

C語言中的函數(shù)(超詳細(xì)),C語言初階,c語言,數(shù)據(jù)庫,開發(fā)語言
程序跑起來就是這個樣子
C語言中的函數(shù)(超詳細(xì)),C語言初階,c語言,數(shù)據(jù)庫,開發(fā)語言

  • 這樣看著很復(fù)雜的樣子,但在一個較大的工程里面是需要多人協(xié)作的,而我們這樣是合理分配了各自的工作。
  • 比如三個人來做一個工程,總不可能一個做累了另一個接著做吧,這時就應(yīng)該三個人分別來做add.h、add.c、test.c,這樣是不是就能加快咱們的效率。

七、函數(shù)遞歸

對于初學(xué)者而言函數(shù)遞歸是比較難啃的一塊,所以本庫打算后面單獨(dú)發(fā)一篇文章來教大家學(xué)習(xí)遞歸。

今天超級詳細(xì)的C語言中的函數(shù)就分享到這里啦!希望各位多多點(diǎn)贊收藏評論??!你的支持是我最大的動力?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-608715.html

到了這里,關(guān)于C語言中的函數(shù)(超詳細(xì))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包