在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言中函數(shù)的創(chuàng)建以及使用

程序員cxuan ? 來(lái)源:程序員cxuan ? 作者:cxuan ? 2022-07-06 09:38 ? 次閱讀

這篇文章是 C 語(yǔ)言系列第三篇,之前兩篇見

哦!這該死的 C 語(yǔ)言!

C 語(yǔ)言基礎(chǔ),來(lái)嘍!

下面我們來(lái)介紹一下 C 語(yǔ)言中一個(gè)非常重要的概念 - 函數(shù) (function)。首先就要先給函數(shù)下一個(gè)定義,函數(shù)就是完成特定任務(wù)的獨(dú)立代碼單元,這也就是說(shuō),一個(gè)函數(shù)肯定是要為了完成某種功能的,比如一個(gè)函數(shù)它能夠執(zhí)行加法運(yùn)算,比如一個(gè)函數(shù)能交換兩個(gè)數(shù)的值,還有一些函數(shù)可能只是為了打印某些東西等等。

函數(shù)也可以把很多大的任務(wù)拆分成一個(gè)個(gè)小的任務(wù),通過(guò)設(shè)計(jì)每個(gè)小的任務(wù)來(lái)完成一個(gè)大的功能。一個(gè)設(shè)計(jì)優(yōu)良的函數(shù)能夠把程序中不需要了解的細(xì)節(jié)隱藏起來(lái),從而使整個(gè)程序結(jié)構(gòu)更加清晰,降低程序的修改難度。

C 語(yǔ)言程序由許多小的函數(shù)組成,一個(gè)程序會(huì)被保存在多個(gè)源文件中,每個(gè)文件可以單獨(dú)編譯,并可以與庫(kù)中已編譯過(guò)的函數(shù)一起加載。

下面我們通過(guò)一個(gè)例子來(lái)討論一下函數(shù)是如何創(chuàng)建并使用的。

函數(shù)創(chuàng)建以及使用

函數(shù)的創(chuàng)建和使用會(huì)分為三個(gè)步驟:

  • 函數(shù)原型 ( function type ):這個(gè)是創(chuàng)建函數(shù)定義,也叫函數(shù)聲明,能夠表明一個(gè)文件中有哪些函數(shù)。
  • 函數(shù)調(diào)用 ( function call ):調(diào)用函數(shù)的位置,函數(shù)被定義出來(lái)肯定是要使用它的,在哪里使用的這個(gè)函數(shù)就被稱為函數(shù)調(diào)用。
  • 函數(shù)定義 ( function definition ):這個(gè)就是函數(shù)的具體要干的什么事兒,也就是函數(shù)的具體邏輯是什么。

這么一看,函數(shù)和變量簡(jiǎn)直一模一樣了,函數(shù)需要原型、調(diào)用和定義,而變量也需要這些,只不過(guò)變量還可以把原型和定義一起表示。

#include

intnum;//變量原型

intsum(int,int);//函數(shù)原型

intmain(void){

num=12;//變量定義
intnum2=11;//函數(shù)原型+函數(shù)定義

intall=sum(num,num2);//變量使用,函數(shù)使用
printf("all=%d",all);

return0;
}

//函數(shù)定義
intsum(inta,intb){

returna+b;
}

上面這段代碼很好的列舉了變量的定義以及函數(shù)的定義。

我們首先定義了一個(gè) num 變量,這個(gè)就是變量的原型,然后在 main 函數(shù)中使用這個(gè)變量,就是變量的定義和使用,當(dāng)然變量也可以直接使用原型 + 定義的方式( 上面的 num2 ),sum 函數(shù)演示了函數(shù)的原型、定義和使用。這里注意一點(diǎn),main 函數(shù)比較特殊,它是所有方法的入口,而且 main 函數(shù)無(wú)需定義原型就能直接使用。

上面這段代碼被一起保存在一個(gè)文件中,當(dāng)然你也可以把它們保存在不同的文件中,只不過(guò)把它們放在同一個(gè)文件中我們?cè)谘菔镜臅r(shí)候比較方便,還有一點(diǎn)就是能夠一起進(jìn)行編譯,這兩個(gè)函數(shù)也可以定義在不同的文件中,分別進(jìn)行編譯,這樣的好處是使程序更加易于維護(hù),代碼讀起來(lái)更加順暢,事實(shí)上項(xiàng)目中也是采用的單獨(dú)編譯的方式。當(dāng)然你也可以把所有的功能都寫在 main 函數(shù)中,只不過(guò)這樣不易于維護(hù),也不符合項(xiàng)目開發(fā)標(biāo)準(zhǔn)。

一個(gè)完整的函數(shù)定義形同如下:

返回值類型函數(shù)名(參數(shù)列表)
{
函數(shù)體(函數(shù)的具體功能)
}

注意我們上面說(shuō)的只是一個(gè)完整的函數(shù)定義,而不是每個(gè)函數(shù)必須都要有返回值類型、參數(shù)列表、函數(shù)體,只有函數(shù)名是必須的(這個(gè)肯定好理解)。

當(dāng)然也有函數(shù)定義出來(lái)什么都沒(méi)有做,這就相當(dāng)于是一個(gè)空函數(shù),C 語(yǔ)言默認(rèn)是允許空函數(shù)出現(xiàn)的,比如下面函數(shù)就是一個(gè)空函數(shù)。

sort(){}

sort 函數(shù)不執(zhí)行任何操作也不返回任何值,這種函數(shù)可以在程序開發(fā)期間用于保留位置,留待以后再填充代碼

程序其實(shí)就是一些變量和函數(shù)的集合,函數(shù)之間的通信可以通過(guò)函數(shù)參數(shù)、返回值來(lái)進(jìn)行,函數(shù)通過(guò)傳遞參數(shù),進(jìn)行一系列的邏輯計(jì)算后,把返回值返回回去,以此達(dá)到函數(shù)交流、通信的目的。

對(duì)于函數(shù)來(lái)說(shuō),我們需要了解的兩個(gè)關(guān)鍵點(diǎn)是參數(shù)列表返回值

函數(shù)參數(shù)

對(duì)于上面的 sum 函數(shù)來(lái)說(shuō),它的函數(shù)參數(shù)有兩個(gè),分別是 int 類型的 a 和 b,像這種在函數(shù)定義的括號(hào)中的變量被稱為函數(shù)參數(shù),這兩個(gè)變量 a 和 b 也叫做形式參數(shù),簡(jiǎn)稱形參。

和定義在函數(shù)中的變量一樣,形式參數(shù)也是局部變量,這些都屬于函數(shù)私有的,作用域范圍都是從進(jìn)入函數(shù)開始起作用到函數(shù)執(zhí)行完成后作用結(jié)束。

當(dāng)函數(shù)接受參數(shù)時(shí),函數(shù)原型用逗號(hào)分隔的列表指明參數(shù)的數(shù)量和類型,函數(shù)原型中你可以使用下面方式定義。

intsum(inta,intb);//函數(shù)原型

也可以省略具體的變量名稱,使用下面這種方式進(jìn)行定義。

intsum(int,int);//函數(shù)原型

在函數(shù)原型中沒(méi)有定義變量,只是聲明了兩個(gè) int 類型的參數(shù)。

除了形參之外,還有一個(gè)叫做實(shí)際參數(shù) ( 實(shí)參 ) 的概念,就對(duì)應(yīng)于上面代碼中的 sum(num,num2),因?yàn)樵谡{(diào)用 sum 的時(shí)候是知道 num 和 num2 的具體值的,像這種在調(diào)用函數(shù)中對(duì)參數(shù)進(jìn)行傳值的參數(shù)被稱為實(shí)參。

簡(jiǎn)單點(diǎn)來(lái)說(shuō)就是 形式參數(shù)是被調(diào)用函數(shù)中的變量,實(shí)際參數(shù)是調(diào)用函數(shù)賦給被調(diào)函數(shù)的具體值。實(shí)際參數(shù)可以是常量、變量,或甚至是更復(fù)雜的表達(dá)式。

被調(diào)函數(shù)不知道也不關(guān)心傳入的數(shù)值是來(lái)自常量、變量還是一般表達(dá)式。實(shí)參在把值傳遞給函數(shù)的時(shí)候,其實(shí)是把值拷貝給被調(diào)函數(shù)的形式參數(shù),所以無(wú)論被調(diào)函數(shù)對(duì)拷貝數(shù)據(jù)進(jìn)行什么操作,都不會(huì)影響主調(diào)函數(shù)中的原始數(shù)據(jù)。

如下代碼所示

#include

intnum;//變量原型

voidsum(int,int);//函數(shù)原型

intmain(void){

num=12;//變量定義
intnum2=11;//函數(shù)原型+函數(shù)定義

sum(num,num2);//變量使用,函數(shù)使用
printf("num=%d,num2=%d",num,num2);

return0;
}

//函數(shù)定義
voidsum(inta,intb){

intsumAll=a+b;
printf("sumAll=%d
",sumAll);

}

從輸出結(jié)果可以看出,只要把值傳遞給 sum 后,不論 sum 函數(shù)內(nèi)部進(jìn)行何種處理,都不會(huì)影響 main 函數(shù)中 num 和 num2 的值。

函數(shù)返回值

我們上面說(shuō)過(guò)函數(shù)之間的通信可以通過(guò)函數(shù)參數(shù)、返回值來(lái)進(jìn)行。函數(shù)參數(shù)的傳遞方向是由函數(shù)調(diào)用者 -> 被調(diào)函數(shù),而函數(shù)返回值的方向是和參數(shù)傳遞的方向相反,也就是被調(diào)函數(shù) -> 函數(shù)調(diào)用者。

b0fb9196-fcc2-11ec-ba43-dac502259ad0.jpg

當(dāng)然并不是所有的函數(shù)都需要返回值,而且 return 語(yǔ)句后面也不一定需要表達(dá)式,當(dāng) return 語(yǔ)句后面沒(méi)有表達(dá)式時(shí),函數(shù)不會(huì)向調(diào)用者返回值。返回值會(huì)通過(guò)

return表達(dá)式

進(jìn)行返回,這個(gè)返回值的表達(dá)式類型和函數(shù)定義的返回值類型是一致的。

我們還用上面的 sum 函數(shù)來(lái)舉例子

intsum(inta,intb){

returna+b;
}

可以看到,sum 函數(shù)的表達(dá)式返回了 a + b,這其實(shí)就是一個(gè)表達(dá)式。而我們可以看到上面的 int main 方法,它的返回值是 0 ,這就是返回了一個(gè)常量。

return 后面可以不返回任何值,只是單獨(dú)寫一個(gè) return 也是允許的,不過(guò)這種方式相當(dāng)于沒(méi)有返回任何值,所以它的函數(shù)類型可以定義為 void ,如下代碼所示:

//函數(shù)定義
voidsum(inta,intb){

intsumAll=a+b;
printf("sumAll=%d
",sumAll);

return;
}

使用 return 語(yǔ)句的另外一個(gè)作用是終止函數(shù)的執(zhí)行,強(qiáng)制把控制返回給調(diào)用函數(shù),如下代碼所示:

//函數(shù)定義
intsum(inta,intb){

intsumAll=a+b;
printf("sumAll=%d
",sumAll);

if(a+b>0){
returnsumAll;
}else{
return0;
}
}

如果 a + b 的值大于 0 的話,會(huì)直接返回 a + b 的和,否則為 0 。這個(gè) if 的控制流程就是強(qiáng)制把結(jié)果返回給函數(shù)調(diào)用者。如果在 if 控制流程后面添加代碼的話,那么這段代碼不會(huì)執(zhí)行,但是編譯卻沒(méi)有給出警告。

b1162c04-fcc2-11ec-ba43-dac502259ad0.jpg

Java 編輯器中,如果最后一行代碼出現(xiàn)在 return 強(qiáng)制返回后面的話,編譯器會(huì)給出警告或者錯(cuò)誤提示這行代碼不會(huì)被執(zhí)行。

函數(shù)類型

這里需要再?gòu)?qiáng)調(diào)一下函數(shù)類型,定義函數(shù)的時(shí)候需要聲明函數(shù)的類型,帶返回值的函數(shù)類型與返回值類型相同,沒(méi)有返回值的函數(shù)應(yīng)該將其定義為 void 類型。在老版本的 C 編譯器中,如果你沒(méi)有聲明函數(shù)類型,編譯器會(huì)默認(rèn)把函數(shù)當(dāng)做 int 類型來(lái)處理,不過(guò)這都是早期的事兒了,現(xiàn)在 C 標(biāo)準(zhǔn)不再支持默認(rèn)函數(shù)為 int 類型這種情況。

在編寫函數(shù)的時(shí)候,你就需要考慮好函數(shù)的具體功能是什么,也就是這個(gè)函數(shù)做了哪些事情,需不需要返回值,如果需要返回值的話,它的返回類型是什么。

函數(shù)聲明

如果大家學(xué)過(guò) Java ,可能對(duì) C 這種先聲明再定義的方式很不習(xí)慣,為什么函數(shù)在定義前需要再單獨(dú)聲明一下呢?我直接定義函數(shù)不聲明行嗎?答案肯定是不行的。

這個(gè)先聲明再使用一直是 C 語(yǔ)言的標(biāo)準(zhǔn),標(biāo)準(zhǔn)沒(méi)有為什么,這就是一個(gè)標(biāo)準(zhǔn),但是這個(gè)標(biāo)準(zhǔn)卻是一個(gè)歷史遺留問(wèn)題。

上世紀(jì) 70 年代,大部分計(jì)算機(jī)內(nèi)存很小,處理速度也比較差,所以導(dǎo)致代碼的運(yùn)行>時(shí)間很長(zhǎng),效率很差,這時(shí)候進(jìn)行我們就需要考慮內(nèi)存占用和編譯時(shí)間的問(wèn)題。因?yàn)?C 語(yǔ)言開發(fā)的比較早,而且 C 又是和硬件直接打交道的,所以提前聲明一下函數(shù)能夠提前分配內(nèi)存空間,提升效率。說(shuō)白了還是效率問(wèn)題。

還有為什么 C 語(yǔ)言不選擇采用預(yù)編譯一下呢?

參考自 https://www.zhihu.com/question/20567689

首先,C語(yǔ)言出現(xiàn)的很早,那時(shí)候編譯器也是一個(gè)很復(fù)雜的東西,當(dāng)時(shí)計(jì)算機(jī)的內(nèi)存、外存都很小,編譯器做的太大也是一個(gè)麻煩的事情,所以事先聲明就成為一種規(guī)范,保留下來(lái),目的是為了讓編譯器更簡(jiǎn)單,雖然這一切已經(jīng)很過(guò)時(shí)了。

其次,預(yù)編譯的成本很高,與腳本語(yǔ)言、解釋語(yǔ)言不同,C語(yǔ)言項(xiàng)目的規(guī)模可以很大,比如操作系統(tǒng)一級(jí)的C語(yǔ)言工程,其源文件有幾萬(wàn)個(gè),涉及全局符號(hào)幾十萬(wàn)個(gè),這樣規(guī)模的項(xiàng)目預(yù)編譯一次的負(fù)擔(dān)是很高的,如果是整個(gè)項(xiàng)目完全掃描一遍,遍歷所有全局符號(hào),再進(jìn)行真正的編譯,估計(jì)很多碼農(nóng)都會(huì)瘋了,等待時(shí)間會(huì)特別長(zhǎng)。

再次,C語(yǔ)言是一種靜態(tài)鏈接的語(yǔ)言,如果一個(gè)項(xiàng)目被設(shè)計(jì)成只編譯,不鏈接的方式,比如有些庫(kù)就會(huì)被設(shè)計(jì)成這樣,有些合作開發(fā)的項(xiàng)目里,組員之間有時(shí)候也只提供obj文件,那么某些全局符號(hào)可能就不包含在現(xiàn)有的代碼里,那么預(yù)搜索就一定找不到某些符號(hào),那么該怎么辦?如果不提供聲明,這個(gè)代碼就沒(méi)辦法編譯了。

基于以上幾點(diǎn)考慮,所以C語(yǔ)言才設(shè)計(jì)成這樣,對(duì)于開發(fā)者而言,不算友好,但也不算很糟糕,甚至在某些方面是有好處的。

對(duì)于一個(gè)函數(shù)來(lái)說(shuō),它的最終目的就是通過(guò)一系列的邏輯處理獲得我們想要的結(jié)果,邏輯處理離不開各種程序控制語(yǔ)句,比如說(shuō) While 、for、do while 等,下面我們就要來(lái)討論一下這些程序控制語(yǔ)句。

程序控制語(yǔ)句

在有些時(shí)候的某些程序可能會(huì)重復(fù)做一件事情,就應(yīng)該讓計(jì)算機(jī)做這些重復(fù)性的工作,這才是我們需要計(jì)算機(jī)的意義。畢竟,需要重復(fù)計(jì)算是使用計(jì)算機(jī)的主要原因。

C 語(yǔ)言中有很多用于重復(fù)計(jì)算的方法,我們下面先來(lái)介紹其中的一種 --- while 循環(huán)

while 循環(huán)

下面我們通過(guò)一段代碼來(lái)看一下 while 循環(huán)的使用。

#include
intmain()
{
inti=1;
while(i<=?10)
{
printf("%d
",i);
i++;
}
return0;
}

這段代碼首先聲明了一個(gè) i 變量,然后使用了 while 循環(huán)來(lái)判斷 i 的值,當(dāng) i 的值 <= 10 的時(shí)候,就會(huì)執(zhí)行 while 中的循環(huán)邏輯,否則即 i > 10 就會(huì)直接跳過(guò)循環(huán),不會(huì)輸出任何結(jié)果就直接返回 0 。

如果 i 的值在 10 以內(nèi),就會(huì)循環(huán)打印出來(lái) i 的值。這就是 while 循環(huán)的作用。

用通俗易懂的語(yǔ)句來(lái)描述 while 循環(huán):當(dāng)某個(gè)判斷條件為 true 的時(shí)候,循環(huán)執(zhí)行 while 中的代碼塊。

流程圖如下:

b132a6e0-fcc2-11ec-ba43-dac502259ad0.png

在 while 循環(huán)中的一個(gè)關(guān)鍵點(diǎn)就是進(jìn)入 while 循環(huán)的判斷,上面代碼就是判斷 i <= 10 ,這個(gè)表達(dá)式是關(guān)系運(yùn)算符的一種。

while循環(huán)經(jīng)常依賴測(cè)試表達(dá)式作比較,這樣的表達(dá)式被稱為關(guān)系表達(dá)式,出現(xiàn)在關(guān)系表達(dá)式中間的運(yùn)算符叫做關(guān)系運(yùn)算符,下表是我們經(jīng)常使用到的關(guān)系運(yùn)算符。

運(yùn)算符 說(shuō)明
< 小于
<= 小于或等于
== 等于
>= 大于或等于
> 大于
!= 不等于

這些運(yùn)算符會(huì)不單單會(huì)出現(xiàn)在 while 循環(huán)中,實(shí)際上任何邏輯控制語(yǔ)句都會(huì)使用到這幾種運(yùn)算符。

這里需要說(shuō)明一點(diǎn),不能用關(guān)系運(yùn)算符來(lái)比較字符串,比如 ch != '@' 。

雖然關(guān)系運(yùn)算符可以用來(lái)比較浮點(diǎn)數(shù),但是要注意:比較浮點(diǎn)數(shù)時(shí),盡量只使用 < 和 > 。因?yàn)楦↑c(diǎn)數(shù)的舍入誤差會(huì)導(dǎo)致在邏輯上應(yīng)該相等的兩數(shù)卻不相等。例如,3乘以1/3的積是1.0。如果用把1/3表示成小數(shù)點(diǎn)后面6位數(shù)字,乘積則是 .999999,不等于 1。

for 循環(huán)

for 循環(huán)一個(gè)非常明顯的特征就是把三個(gè)行為組合在一處,也就是初始化、判斷、更新,如下代碼所示。

#include
intmain()
{
for(inti=1;i<=?10;i++){
printf("%d
",i);
}
return0;
}

可以看到,上面代碼中 for 循環(huán)分別做了三件事情,每個(gè)表達(dá)式用 ; 進(jìn)行分隔。

  • int i = 0 相當(dāng)于是對(duì) i 進(jìn)行初始化操作;
  • i <= 10 相當(dāng)于對(duì) i 進(jìn)行一個(gè)邏輯判斷,邏輯判斷是判斷是否進(jìn)行下一次循環(huán)的關(guān)鍵。
  • i++ 相當(dāng)于是更新 i 的值。

for 循環(huán)的一般形式定義如下:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{
語(yǔ)句;
}

這里要注意的是,表達(dá)式 1 只在循環(huán)開始時(shí)執(zhí)行一次,而表達(dá)式 3 是循環(huán)結(jié)束后再執(zhí)行。表達(dá)式 2 可以省略,省略后默認(rèn)值為 1,則判斷為真,for 循環(huán)就會(huì)成為一個(gè)死循環(huán)。

for 循環(huán)的流程圖如下

b15b1bb6-fcc2-11ec-ba43-dac502259ad0.png

do while 循環(huán)

一般來(lái)說(shuō),循環(huán)的方式可以分為兩種:入口循環(huán)和出口循環(huán),什么意思呢?入口循環(huán)是先進(jìn)行循環(huán),再執(zhí)行每次循環(huán)要做的事情,比如上面的 while 循環(huán)、for 循環(huán),他們都是先進(jìn)行判斷是否需要進(jìn)行下一次循環(huán),如果需要的話,才會(huì)打印出 i 的值,這就是入口循環(huán)。

而出口循環(huán)則是要先執(zhí)行代碼,再判斷是否要進(jìn)行下一次循環(huán),即在循環(huán)的每次迭代之后檢查測(cè)試條件,這保證了至少執(zhí)行循環(huán)體中的內(nèi)容一次,典型的出口循環(huán)就是 do ... while。

我們把上面的代碼進(jìn)行修改:

#include
intmain()
{
inti=1;
do{
printf("%d
",i);
i++;
}while(i<=?10);

return0;
}

從輸出結(jié)果可以看到,do while 循環(huán)在執(zhí)行完循環(huán)體后才執(zhí)行測(cè)試條件,所以 do ... while 循環(huán)至少執(zhí)行循環(huán)體一次,而 for 循環(huán)和 while 循環(huán)在執(zhí)行循環(huán)體之前先執(zhí)行測(cè)試條件,do ... while 的一般形式如下

do
代碼
while(表達(dá)式);

do ... while 循環(huán)的流程圖如下

b17c01dc-fcc2-11ec-ba43-dac502259ad0.png

到現(xiàn)在為止, C 語(yǔ)言中的程序控制語(yǔ)句我們都了解了,那么該如何進(jìn)行選擇呢?

實(shí)際上上面我們已經(jīng)稍微討論了一下如何選擇的問(wèn)題了。

while 循環(huán)和 for 循環(huán)很類似,這兩類循環(huán)都是先進(jìn)行一次循環(huán)條件的判斷,然后再執(zhí)行具體的循環(huán)體操作,只要一次循環(huán)條件不滿足則一次都不會(huì)執(zhí)行;而 do ... while 循環(huán)會(huì)至少先進(jìn)行一次循環(huán),然后才會(huì)執(zhí)行循環(huán)判斷。

一般來(lái)說(shuō),使用 for 循環(huán)的場(chǎng)景比較多,因?yàn)?for 循環(huán)形式更加簡(jiǎn)潔,而且在 for 循環(huán)中,變量和判斷以及更新的作用域都在循環(huán)體內(nèi),不會(huì)有其他外部代碼來(lái)修改這些變量,更可控,在 while 和 do ... while 循環(huán)中,變量的更新不可控,而且代碼也沒(méi)有 for 循環(huán)可讀性強(qiáng)。

break 和 continue

break 和 continue 相當(dāng)于是循環(huán)體內(nèi)領(lǐng)導(dǎo)者的這樣一個(gè)角色,有了這兩個(gè)角色存在,循環(huán)體內(nèi)的代碼會(huì)根據(jù)這兩個(gè)關(guān)鍵字來(lái)判斷是中斷循環(huán)還是執(zhí)行下一次循環(huán)。

C 語(yǔ)言中的 break 有兩種用法:

  • 一種用法是用在循環(huán)體中,當(dāng) break 出現(xiàn)在循環(huán)體中時(shí),會(huì)中斷這個(gè)循環(huán)。
  • 一種用法是用在 switch 語(yǔ)句中,用作中斷這個(gè) switch 語(yǔ)句的 case 條件。

break 用于中斷循環(huán):如下代碼所示

#include

intmain(void)
{
for(inti=1;i<=?10;i++){
if(i==5){
break;
}
printf("i的值=%d
",i);
}

return0;
}

輸出的結(jié)果是 i 的值 = 1 - 4, 當(dāng) i == 5 時(shí),會(huì)進(jìn)入到 if 判斷中,if 判斷會(huì)直接觸發(fā) break,break 用于跳出當(dāng)前循環(huán),當(dāng)前是 for 循環(huán),所以 break 會(huì)直接跳到 for 循環(huán)外面,也就是直接 return ,不會(huì)再打印 i 的值。

b19152a8-fcc2-11ec-ba43-dac502259ad0.png

continue 關(guān)鍵字用于跳過(guò)當(dāng)前循環(huán),執(zhí)行下一次循環(huán),它和 break 很相似但是有著本質(zhì)的區(qū)別,break 是跳出循環(huán),continue 是執(zhí)行下一次循環(huán),我們同樣拿這個(gè)代碼來(lái)說(shuō)明,只需要把上面的 break 改成 continue 即可。

#include

intmain(void)
{
for(inti=1;i<=?10;i++){
if(i==5){
continue;
}
printf("i的值=%d
",i);
}

return0;
}

(這段代碼的輸出結(jié)果會(huì)輸出出 i = 5 以外的值)

從輸出結(jié)果可以看出,只有 i = 5 的值沒(méi)有輸出,這也就是說(shuō),當(dāng)代碼執(zhí)行到 i == 5 的時(shí)候,會(huì)進(jìn)行 continue 繼續(xù)執(zhí)行當(dāng)前循環(huán),從而跳過(guò)這次循環(huán)后面的代碼,如下圖所示。

b1a41f28-fcc2-11ec-ba43-dac502259ad0.png

總結(jié)

這篇文章我主要和你聊了聊 C 語(yǔ)言中的函數(shù),函數(shù)定義、函數(shù)返回值、參數(shù)以及程序控制流程中的三類循環(huán)的特點(diǎn)以及選型,最后又介紹了一下 break 和 continue 的作用。

如果文章對(duì)你有幫助,還請(qǐng)各位小伙伴們?nèi)B支持哦!


審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7624

    瀏覽量

    139467
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4361

    瀏覽量

    63658
  • break
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    2560

原文標(biāo)題:講一篇通俗易懂的 C 函數(shù)。

文章出處:【微信號(hào):cxuangoodjob,微信公眾號(hào):程序員cxuan】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言中指針函數(shù)函數(shù)指針的概念及應(yīng)用示例

    C語(yǔ)言中,指針函數(shù)函數(shù)指針是強(qiáng)大且常用的工具。它們?cè)试S我們以更靈活的方式處理函數(shù)和數(shù)據(jù),進(jìn)而擴(kuò)展程序的功能。
    發(fā)表于 08-16 16:14 ?1394次閱讀

    C語(yǔ)言中函數(shù)的基本知識(shí)

    函數(shù)C語(yǔ)言中的基本構(gòu)建塊之一,它允許我們將代碼組織成可重用、模塊化的單元。
    發(fā)表于 08-16 18:25 ?639次閱讀

    C語(yǔ)言中宏定義的應(yīng)用

    C語(yǔ)言中,宏定義是一種預(yù)處理指令,用于在代碼中定義和使用常量、函數(shù)或代碼片段的替代。
    發(fā)表于 08-17 15:33 ?1035次閱讀

    C語(yǔ)言中memmove函數(shù)的使用

    C語(yǔ)言編程中,內(nèi)存操作是不可或缺的一部分,而 memmove 函數(shù)是其中一個(gè)重要的工具。本文將介紹 memmove 函數(shù)的應(yīng)用場(chǎng)景以及提供
    發(fā)表于 09-13 09:17 ?1778次閱讀

    C語(yǔ)言中atoi()函數(shù)應(yīng)該怎么用?

    C語(yǔ)言中atoi()函數(shù)應(yīng)該怎么用?
    發(fā)表于 10-14 09:10

    c語(yǔ)言函數(shù)指針定義,指針函數(shù)函數(shù)指針的區(qū)別

     往往,我們一提到指針函數(shù)函數(shù)指針的時(shí)候,就有很多人弄不懂。下面就由小編詳細(xì)為大家介紹C語(yǔ)言中函數(shù)指針,指針
    發(fā)表于 11-16 15:18 ?3822次閱讀

    單片機(jī)C語(yǔ)言中如何使用nop函數(shù)進(jìn)行短延時(shí)的效果資料和程序說(shuō)明

    單片機(jī)C語(yǔ)言中如何使用nop函數(shù)進(jìn)行短延時(shí)的效果資料和程序說(shuō)明 標(biāo)準(zhǔn)的C語(yǔ)言中沒(méi)有空語(yǔ)句。但在單片機(jī)的
    發(fā)表于 03-05 11:01 ?10次下載
    單片機(jī)<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b>如何使用nop<b class='flag-5'>函數(shù)</b>進(jìn)行短延時(shí)的效果資料和程序說(shuō)明

    剖析什么是C語(yǔ)言中的隱式函數(shù)聲明

    「1、什么是C語(yǔ)言的隱式函數(shù)聲明」 在C語(yǔ)言中函數(shù)在調(diào)用前不一定非要聲明。如果沒(méi)有聲明,那么編
    的頭像 發(fā)表于 05-25 09:38 ?4100次閱讀
    剖析什么是<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b>的隱式<b class='flag-5'>函數(shù)</b>聲明

    C語(yǔ)言怎么跳出while函數(shù)

    C語(yǔ)言中while函數(shù)是經(jīng)常用到的,這里說(shuō)一下可以跳出while函數(shù)的幾種方法。
    的頭像 發(fā)表于 06-17 15:40 ?3.8w次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>怎么跳出while<b class='flag-5'>函數(shù)</b>

    scanf在C語(yǔ)言中的作用

    scanf在C語(yǔ)言中的作用? scanf是C語(yǔ)言中的輸入函數(shù),用于從標(biāo)準(zhǔn)輸入設(shè)備(如鍵盤)讀取數(shù)據(jù),并將其存儲(chǔ)到變量中。它是
    的頭像 發(fā)表于 11-23 14:13 ?1883次閱讀

    c語(yǔ)言gets函數(shù)可以輸入數(shù)字嗎

    C語(yǔ)言中的gets函數(shù)是用來(lái)讀取字符串的,而不是用來(lái)讀取數(shù)字的。它會(huì)讀取輸入的字符直到遇到換行符或者文件結(jié)束符。因此,如果你嘗試使用gets函數(shù)來(lái)讀取數(shù)字,是無(wú)法準(zhǔn)確獲取數(shù)字本身的。
    的頭像 發(fā)表于 11-24 10:00 ?1820次閱讀

    c語(yǔ)言中函數(shù)函數(shù)體用什么符號(hào)括起來(lái)

    知道函數(shù)是數(shù)學(xué)里的重要組成部分,數(shù)學(xué)中我們常見到函數(shù)的概念,但是你了解C語(yǔ)言中函數(shù)嗎?其實(shí)函數(shù)
    的頭像 發(fā)表于 11-24 15:52 ?945次閱讀
    <b class='flag-5'>c</b><b class='flag-5'>語(yǔ)言中</b><b class='flag-5'>函數(shù)</b>的<b class='flag-5'>函數(shù)</b>體用什么符號(hào)括起來(lái)

    如何給C語(yǔ)言中函數(shù)定義兩個(gè)不同的名字?

    最近有位哥問(wèn)我,如何給C語(yǔ)言中函數(shù)定義兩個(gè)不同的名字?就是這兩個(gè)名字都是指向同一個(gè)函數(shù),同一個(gè)地址,而且兩個(gè)名字都可以當(dāng)做函數(shù)來(lái)用的那種。
    的頭像 發(fā)表于 12-19 16:21 ?1070次閱讀

    C語(yǔ)言中的socket編程基礎(chǔ)

    數(shù)據(jù) 步驟6:關(guān)閉socket 創(chuàng)建socket 在C語(yǔ)言中創(chuàng)建socket需要使用socket()函數(shù)。這個(gè)
    的頭像 發(fā)表于 11-01 16:51 ?820次閱讀

    EE-128:C語(yǔ)言中的DSP:從C調(diào)用匯編類成員函數(shù)

    電子發(fā)燒友網(wǎng)站提供《EE-128:C語(yǔ)言中的DSP:從C調(diào)用匯編類成員函數(shù).pdf》資料免費(fèi)下載
    發(fā)表于 01-07 13:48 ?0次下載
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b>的DSP:從<b class='flag-5'>C</b>調(diào)用匯編類成員<b class='flag-5'>函數(shù)</b>
    主站蜘蛛池模板: 久久精品亚洲热综合一本奇米 | 成在线人永久免费播放视频 | 亚洲性影院| 四虎最新网址在线观看 | 久久天天躁狠狠躁夜夜2020一 | 12306影院午夜入口 | 天天干妹子 | 特级a毛片| 午夜亚洲国产精品福利 | 很黄很污的视频网站 | 久久久久激情免费观看 | 五月天婷婷伊人 | 国产999星空传媒在线观看 | 午夜欧美性视频在线播放 | 户外露出 自拍系列 | 精品美女在线观看 | 天堂bt| 校园春色亚洲欧美 | 亚洲天堂成人网 | 国产自在自线午夜精品视频在 | 农村苗族一级特黄a大片 | aaaaaa精品视频在线观看 | 欧美一级特黄aa大片视频 | 久久国产精品99精品国产987 | 狠狠色婷婷 | 久久青草国产手机看片福利盒子 | 大色综合色综合资源站 | 视频在线色 | 国产片无遮挡在线看床戏 | 美女视频黄又黄又免费高清 | 黄网站色成年片大免费软件 | 国产美女视频一区二区三区 | 欧美白人极品性喷潮 | 激情综合婷婷 | 色综合综合色综合色综合 | 另类性欧美喷潮videofree | 色多多在线观看高清免费 | 岛国片欧美一级毛片 | 在线观看国产三级 | 国产成人精品曰本亚洲77美色 | 狠狠色综合久久婷婷 |