【持續(xù)更新】C語(yǔ)言 第五天學(xué)習(xí)筆記(函數(shù)完整版)

一、【理解】復(fù)習(xí)昨天內(nèi)容

二腾降、【掌握】函數(shù)的介紹和簡(jiǎn)單使用

思考:
如果你要做個(gè)表白的軟件,其中想打印9次愛(ài)心碎绎,代表你對(duì)妹紙濃濃的愛(ài)螃壤,怎么做呢?

打印表白

親筋帖!你需要一種更簡(jiǎn)單高效的編碼方式——函數(shù)<榍纭!
思考:

我們已經(jīng)學(xué)過(guò)的函數(shù)有哪些幕随?

函數(shù)的作用:

函數(shù)就相當(dāng)于是一個(gè)打包盒蚁滋,將一段代碼打包在這個(gè)盒子里,當(dāng)需要用這段代碼時(shí)赘淮,只要把這個(gè)盒子拿過(guò)來(lái)就行了辕录。

稍微專業(yè)點(diǎn)的說(shuō)法:

將一段需要被重用的代碼封裝在函數(shù)中,什么時(shí)候想要執(zhí)行這段代碼梢卸,只需要調(diào)用這個(gè)函數(shù)就行了走诞。

函數(shù)的定義:


  返回值類型    函數(shù)名(參數(shù)列表){

               函數(shù)體

}

例:

int  main(){

 

}

 

void   test(){

 

}

 

 
    ```
####函數(shù)定義的注意點(diǎn):

#####1、函數(shù)名可以任意寫蛤高,但最好符合標(biāo)識(shí)符命名規(guī)范:

   1)函數(shù)的名稱一定要有意義蚣旱,盡量做到別人一看你函數(shù)名就知道你的函數(shù)內(nèi)部做什么事情

 

2)函數(shù)的名稱用駝峰命名法:如果有多個(gè)單詞,第一個(gè)單詞首字母小寫戴陡,后面的其他單詞字母首字母大寫

 

 

#####2塞绿、什么時(shí)候該使用函數(shù)?

     
如果你發(fā)現(xiàn)有1段代碼是在完成1個(gè)獨(dú)立的功能或者需要重用恤批,那么這個(gè)時(shí)候我們也可以將這段代碼封裝在函數(shù)之中.

 

#####3异吻、函數(shù)的好處:

1、減少代碼冗余喜庞,增強(qiáng)閱讀性

2诀浪、方便維護(hù)和修改

 

 

 

#####練習(xí):使用函數(shù)來(lái)打印九九乘法表




###三、【掌握】Xcode調(diào)試的使用  

####一延都、斷點(diǎn)調(diào)試


![斷點(diǎn)調(diào)試](http://upload-images.jianshu.io/upload_images/3899701-4cb79f263456856b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![斷點(diǎn)示意圖](http://upload-images.jianshu.io/upload_images/3899701-de4cb1b007189208.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

下斷點(diǎn)有什么用雷猪?

 

當(dāng)你用Xcode編譯并啟動(dòng)程序時(shí),程序執(zhí)行到你下斷點(diǎn)的地方會(huì)卡住晰房,不再往下執(zhí)行求摇,如:



![如圖](http://upload-images.jianshu.io/upload_images/3899701-56eb3e4a85fb46da.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

我們發(fā)現(xiàn)第43行代碼處有一行綠色的yin陰影,這代CPU執(zhí)行到這一行時(shí)停止了(此行還沒(méi)執(zhí)行)殊者,如果想繼續(xù)往下執(zhí)行与境,此時(shí)有三種方法:

####    1、往下繼續(xù)執(zhí)行全部
繼續(xù)往下執(zhí)行幽污,直到遇到下一個(gè)斷點(diǎn)嚷辅、阻塞式函數(shù)、或者程序結(jié)束

![如圖所示](http://upload-images.jianshu.io/upload_images/3899701-2a64d4050acd667b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    調(diào)用完成直接執(zhí)行后面的結(jié)果距误,打印圖形和文字


![打印圖形](http://upload-images.jianshu.io/upload_images/3899701-adf8002753cdd70d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

####單行跳過(guò)執(zhí)行(step over)
一行一行地執(zhí)行簸搞,按一次執(zhí)行一次。但是使用這種模式會(huì)使當(dāng)前遇到的函數(shù)一下子就執(zhí)行完

![單行跳過(guò)執(zhí)行](http://upload-images.jianshu.io/upload_images/3899701-be7e46bbdfb0bf58.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![如圖所示](http://upload-images.jianshu.io/upload_images/3899701-77aa28dccacb8fe3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

按完后會(huì)執(zhí)行完printf准潭,停在drawHeart


![如圖](http://upload-images.jianshu.io/upload_images/3899701-3a01c0356044e94b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![圖2](http://upload-images.jianshu.io/upload_images/3899701-dee59eeeb7d4f73e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

####3趁俊、單行進(jìn)入執(zhí)行(step into)

一行一行地執(zhí)行,按一次執(zhí)行一次刑然。但是使用這種模式會(huì)使進(jìn)入到當(dāng)前遇到的函數(shù)寺擂,并在函數(shù)里一步一步運(yùn)行

![單行進(jìn)入](http://upload-images.jianshu.io/upload_images/3899701-3fb2c1d2f7db69e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
此時(shí)CPU卡在drawHeart,當(dāng)我們?cè)侔磗tep into時(shí),發(fā)生了和step over不同的事情
![如圖所示](http://upload-images.jianshu.io/upload_images/3899701-94d426d6602de4d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![圖2](http://upload-images.jianshu.io/upload_images/3899701-dcddbf064f414144.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![圖3](http://upload-images.jianshu.io/upload_images/3899701-8437fe0c2fd89c80.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)



![圖4](http://upload-images.jianshu.io/upload_images/3899701-c3754491ffd0e4e2.png)


![圖5](http://upload-images.jianshu.io/upload_images/3899701-d87fa98ab3e081e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

總結(jié):
step over 和step into最大的不同在于:

step over一下子就執(zhí)行完函數(shù)怔软,不進(jìn)入函數(shù)的內(nèi)部

step  into 會(huì)進(jìn)入到函數(shù)的內(nèi)部垦细,在內(nèi)部一行一行地執(zhí)行





###二、刪除斷點(diǎn):
1)直接按住斷點(diǎn)左鍵不動(dòng)往右邊一拖再松開即可刪除斷點(diǎn)

2)右鍵斷點(diǎn)陰影挡逼,在彈出的選項(xiàng)中左鍵單擊Delete Breakpoint即可刪除斷點(diǎn)
![如圖所示](http://upload-images.jianshu.io/upload_images/3899701-67132365cfae7784.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


四括改、【掌握】全局變量和局部變量
-> 全局變量

直接定義在.c源文件中,函數(shù)的外部.就叫做全局變量

 

-> 局部變量

 定義在函數(shù)內(nèi)部的變量,就叫做局部變量

 

####不同點(diǎn):

1)全局變量可以在任何函數(shù)中使用,而局部變量只能在被申明這個(gè)變量的函數(shù)里使用家坎。

2)全局變量直到程序結(jié)束時(shí)才會(huì)銷毀嘱能,而局部變量在函數(shù)結(jié)束后就會(huì)被銷毀

### 五、【掌握】函數(shù)的參數(shù)
思考:
        如果想做一個(gè)函數(shù)虱疏,用來(lái)判斷一個(gè)數(shù)是不是偶數(shù)惹骂,怎么辦?

 

 

我們發(fā)現(xiàn)做瞪,很多時(shí)候函數(shù)要想完成某種功能对粪,也必須要接收外界傳入的值才能進(jìn)行處理,那么這時(shí)怎么辦呢穿扳?

 

我們可以使用全局變量解決這個(gè)問(wèn)題衩侥,但是,全局變量有個(gè)很不好的地方在于始終占據(jù)著我們的內(nèi)存空間矛物,除非程序退出才會(huì)釋放占用的空間茫死,那么這時(shí)怎么辦呢?

 

 好在C語(yǔ)言為我們提供了一套十分好的解決方法:函數(shù)的參數(shù)履羞!

 

####1峦萎、什么是函數(shù)的參數(shù)?

在函數(shù)名右邊的小括號(hào)里申明的變量忆首,就叫參數(shù)爱榔。注意:沒(méi)有分號(hào)!

 

 

####2糙及、函數(shù)的參數(shù)的本質(zhì):

相當(dāng)于函數(shù)內(nèi)部的局部變量详幽,所以不能在函數(shù)內(nèi)部再定義一個(gè)同名的變量,并且在函數(shù)內(nèi)部可以直接使用參數(shù)的值

![函數(shù)本質(zhì)示意圖](http://upload-images.jianshu.io/upload_images/3899701-1bd2e09561ad5300.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

調(diào)用函數(shù)時(shí)需要給參數(shù)進(jìn)行賦值浸锨,否則會(huì)報(bào)錯(cuò)唇聘!如:


![函數(shù)本質(zhì)示意圖2](http://upload-images.jianshu.io/upload_images/3899701-05b3c841d88443ce.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


思考:什么時(shí)候該為函數(shù)寫參數(shù)呢?
建議:如果以后不知道要不要給函數(shù)寫參數(shù)柱搜,就先寫函數(shù)的功能迟郎,等發(fā)現(xiàn)需要接收外部傳入的值時(shí),再寫函數(shù)聪蘸!

####3宪肖、帶多個(gè)參數(shù)的函數(shù)

思考:如果我們需要做一個(gè)實(shí)現(xiàn)做加法運(yùn)算功能的函數(shù)表制,怎么做呢?

 

我們?cè)僖淮伟l(fā)現(xiàn)很多時(shí)候一個(gè)參數(shù)是完全不夠用的控乾,所以我們需要多個(gè)參數(shù)么介。多個(gè)參數(shù)怎么定義

呢?

 

 

定義方法:

返回值 函數(shù)名(參數(shù)類型 參數(shù)名1阱持,參數(shù)類型 參數(shù)名2…………參數(shù)類型 參數(shù)名n){

函數(shù)體夭拌;

}

 

使用注意:

1)實(shí)參的個(gè)數(shù)必須與形參的保持一致

2)實(shí)參的順序也必須與形參的保持一致

3)實(shí)參的類型必須與形參保持一致魔熏,否則會(huì)做類型轉(zhuǎn)換



![如圖所示](http://upload-images.jianshu.io/upload_images/3899701-7cbff79eaff2096e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###4衷咽、形參和實(shí)參

形參:全稱形式參數(shù)。在聲明函數(shù)右邊的小括號(hào)里寫的參數(shù)就叫形參蒜绽。
實(shí)參:全稱實(shí)際參數(shù)镶骗。在調(diào)用函數(shù)時(shí),給函數(shù)的形參賦值的值就叫實(shí)參躲雅。


![形參和實(shí)參](http://upload-images.jianshu.io/upload_images/3899701-5bd6477b091d20da.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
使用注意:因?yàn)閷?shí)參的本質(zhì)就是在調(diào)用函數(shù)時(shí)為形參賦值鼎姊,所以當(dāng)我們調(diào)用一個(gè)帶參數(shù)的函數(shù)時(shí),會(huì)要求實(shí)參的類型與形參的類型一致相赁。如果類型不一致相寇,會(huì)將實(shí)參的數(shù)據(jù)類型轉(zhuǎn)換為形參的類型然后再賦值

 

例:  int  
a   = 10.3     會(huì)先將10.3轉(zhuǎn)成int類型(即10)再賦值給變量a,所以變量a的值為10

 

在函數(shù)的實(shí)參中钮科,也是類似這樣的過(guò)程來(lái)給形參賦值


###六唤衫、【理解】課堂練習(xí)
1、用函數(shù)來(lái)實(shí)現(xiàn)判斷一個(gè)數(shù)是不是水仙花數(shù)

 

 

 

2绵脯、寫一個(gè)函數(shù)佳励,求指定某個(gè)數(shù)到某個(gè)數(shù)之間所有的整數(shù)的累加和

如:3到8,算出3+4+5+6+7+8 = 蛆挫?

 

 

3赃承、用函數(shù)來(lái)實(shí)現(xiàn)判斷一個(gè)年份是不是閏年(考點(diǎn))

###七、【掌握】return關(guān)鍵字

回憶:break   悴侵、 continue關(guān)鍵字的作用是什么瞧剖?

 

return關(guān)鍵字也有結(jié)束的作用,但效果比break可免、continue恐怖的多抓于,是直接結(jié)束整個(gè)函數(shù)。return關(guān)鍵字后面的語(yǔ)句不會(huì)被執(zhí)行

 

 

 

 

總結(jié):break     continue     return

 

break:用在循環(huán)或者switch case語(yǔ)句中巴元,用來(lái)結(jié)束其所在的循環(huán)或者switch
case語(yǔ)句

 

continue:用在循環(huán)中毡咏,用來(lái)結(jié)束其本次循環(huán),繼續(xù)下次循環(huán)

 

return:用在函數(shù)中逮刨,用來(lái)結(jié)束整個(gè)函數(shù)


練習(xí):

  用函數(shù)實(shí)現(xiàn)判斷一個(gè)數(shù)是不是偶數(shù)呕缭,但函數(shù)內(nèi)部只能用if語(yǔ)句實(shí)現(xiàn)堵泽,不能用if else 或者if else if



###八、【掌握】函數(shù)的返回值

思考:寫一個(gè)函數(shù)實(shí)現(xiàn)計(jì)算出語(yǔ)文成績(jī)和數(shù)學(xué)成績(jī)的總分恢总。然后蒼老師叫小明和小王還有小軍分別去計(jì)算出他們的總分迎罗,然后蒼老師要統(tǒng)計(jì)他們?nèi)齻€(gè)人的總分,這時(shí)怎么做呢片仿?

####什么時(shí)候需要函數(shù)的返回值纹安?

         當(dāng)函數(shù)執(zhí)行完畢能得出一個(gè)結(jié)果,但是函數(shù)內(nèi)部不知道怎么正確地處理這個(gè)結(jié)果砂豌,恰好這個(gè)結(jié)果又是調(diào)用者想用來(lái)得到的厢岂,就需要有函數(shù)的返回值!

 

####怎樣讓函數(shù)有返回值阳距?

1)確定要返回的值的類型

2)修改函數(shù)的返回值類型為你想要返回值的類型(如將之前的void改為int)

3)在函數(shù)內(nèi)使用  return 
表達(dá)式   
返回

 

 

####調(diào)用者如何拿到函數(shù)返回的數(shù)據(jù)塔粒?

申明一個(gè)與函數(shù)返回值相同類型的變量,并將返回值賦值給這個(gè)變量就可以了

 

 

 

####函數(shù)的其他注意點(diǎn):

1)如果函數(shù)有返回值筐摘,調(diào)用者可以接收卒茬,也可以不接收。但如接收咖熟,需要準(zhǔn)備對(duì)應(yīng)的類型來(lái)接收

2)void 代表沒(méi)有返回值圃酵,如果一個(gè)函數(shù)返回值是void的,調(diào)用者不需要接收馍管。如果強(qiáng)行接收會(huì)報(bào)錯(cuò)

3)返回的數(shù)據(jù)類型要與函數(shù)定義的返回值類型一致郭赐,如果不一致,會(huì)先將所返回的值轉(zhuǎn)換成定義的返回值類型再返回

4)如果函數(shù)定義了返回值咽斧,并且函數(shù)體里面有多個(gè)分支堪置,那么每個(gè)分支都必須要有返回值,否則會(huì)報(bào)錯(cuò)

###九张惹、【掌握】函數(shù)的申明


####1舀锨、為什么需要對(duì)函數(shù)進(jìn)行申明
 

   編譯器很笨,只會(huì)從上到下依次將代碼翻譯成計(jì)算機(jī)可以識(shí)別的二進(jìn)制指令宛逗,所以如果當(dāng)函數(shù)的申明寫在它被調(diào)用之后坎匿,編譯器會(huì)報(bào)錯(cuò)!

 

   為了解決這個(gè)問(wèn)題雷激,所以如果函數(shù)的實(shí)現(xiàn)寫在調(diào)用語(yǔ)句后面的話則需要先對(duì)函數(shù)進(jìn)行申明替蔬。代表告訴編譯器:有這個(gè)函數(shù),你只管編譯就好屎暇!


####2承桥、 完整的寫函數(shù)的兩個(gè)步驟

 

     1). 函數(shù)的聲明

         語(yǔ)法: 只寫函數(shù)頭 直接加1個(gè)分號(hào)結(jié)束.

         作用: 告訴編譯器,這個(gè)函數(shù)是有的 只不過(guò)在后面.

 

     2). 函數(shù)的實(shí)現(xiàn)(定義)

         和我們之前講的函數(shù)的定義是一樣的.

         表示真正的來(lái)實(shí)現(xiàn)這個(gè)函數(shù).

 

####3、函數(shù)申明的幾點(diǎn)注意

 

     1). 如果被調(diào)用的函數(shù)在主調(diào)用函數(shù)之前,那么被調(diào)用函數(shù)可以不寫聲明直接寫實(shí)現(xiàn)

 

         一般情況下,main函數(shù)是放在最前面的. 所以我們自定義的函數(shù)要在最前面寫聲明根悼,在后面寫實(shí)現(xiàn).


![注意](http://upload-images.jianshu.io/upload_images/3899701-61c0772b73a802e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


     2). 函數(shù)的聲明可以在任意的地方但是至少應(yīng)該在函數(shù)調(diào)用之前聲明

                    即使是這樣. 但是一般情況下 函數(shù)的聲明我們都放在#include指令之后.

 

     3). 函數(shù)的聲明必須要與函數(shù)實(shí)現(xiàn)的函數(shù)頭一樣,否則會(huì)出問(wèn)題.

                    所以,我們建議大家 先寫函數(shù)的實(shí)現(xiàn) 然后將函數(shù)實(shí)現(xiàn)的頭拷貝聲明.



![如圖](http://upload-images.jianshu.io/upload_images/3899701-b1220432c540f710.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)



     4). 聲明函數(shù)的時(shí)候形參可以只寫類型不寫名稱



![如圖4](http://upload-images.jianshu.io/upload_images/3899701-8a6b7b91fe8633e4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


     5). 如果函數(shù)的返回值類型是int類型的那么可以省略函數(shù)聲明

      但是為了更好的代碼可移植性 以及可閱讀性十分的建議還是要把聲明寫上.


![如圖](http://upload-images.jianshu.io/upload_images/3899701-df9ca0ab6918ed19.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###十凶异、【掌握】函數(shù)的其他注意
1蜀撑、值傳遞:是指實(shí)參給形參賦值,傳遞的永遠(yuǎn)是值剩彬,而非實(shí)參的內(nèi)存空間(以后學(xué)指針后可以把空間地址傳過(guò)去)酷麦,所以在函數(shù)里給形參重新賦值不會(huì)影響到實(shí)參。

 

 

2喉恋、C語(yǔ)言中函數(shù)沒(méi)有重載沃饶。即:C語(yǔ)言中的函數(shù)不允許出現(xiàn)函數(shù)同名的情況,否則編譯器會(huì)報(bào)錯(cuò)

 

 

3轻黑、函數(shù)內(nèi)部不能定義一個(gè)新的函數(shù)糊肤,但是可以在函數(shù)內(nèi)部再調(diào)用函數(shù)


###十一【理解】函數(shù)練習(xí)

1. 寫1個(gè)函數(shù) 返回兩個(gè)整型數(shù)中的最大值.

 

2. 寫1個(gè)函數(shù),傳入1個(gè)人的年齡,判斷年齡是否成年

 

 

附加題:

 

1. 寫1個(gè)函數(shù),返回1個(gè)浮點(diǎn)數(shù)的四舍五入的整數(shù)

 

2.寫1個(gè)函數(shù),用來(lái)判斷3個(gè)整數(shù)的最大值苔悦,這個(gè)函數(shù)只能傳兩個(gè)參數(shù)

 即申明成右邊的格式:int  getMax(int  num1,int num2);



###十二【理解】#include指令


####1轩褐、#include是一個(gè)預(yù)處理指令  
#####1) 什么是與處理指令?

   就是在源代碼編譯之前進(jìn)行的一系列操作玖详。其中預(yù)處理指令包含:文件包含、宏定義勤讽、條件編譯指令  等等

 

  預(yù)處理指令的特點(diǎn):

A蟋座、所有的預(yù)處理指令都是以#開頭

B、沒(méi)有分號(hào)

C脚牍、在編譯之前執(zhí)行

 

   

##### 2)#include指令是一條文件包含預(yù)處理指令

 

作用:將指定文件的內(nèi)容拷貝到寫這條#include指令的地方

語(yǔ)法:

include "文件名稱"

include <文件名稱>


例:

![  預(yù)編譯](http://upload-images.jianshu.io/upload_images/3899701-86c8eb3bcf224c83.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
使用注意:

 1)被包含的文件里面的內(nèi)容必須符合C語(yǔ)言語(yǔ)法規(guī)范向臀,否則即使包含進(jìn)來(lái),編譯的時(shí)候也會(huì)報(bào)錯(cuò)诸狭!


![圖1](http://upload-images.jianshu.io/upload_images/3899701-48e605a04d888e15.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        2)如果要包含的文件就在當(dāng)前寫#include指令文件的同一目錄券膀,則包含路徑可以省略,只寫文件名驯遇。

例:
![圖2](http://upload-images.jianshu.io/upload_images/3899701-2ec54210acc01cc6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


###2芹彬、#include指令的搜索順序

分兩種情況:



   
1)#include 
"文件名稱" 

a、如果指定了全路徑叉庐,則直接去對(duì)應(yīng)的路徑查找文件



b舒帮、如果沒(méi)有指定全路徑,則先去當(dāng)前代碼文件所在文件夾里查找陡叠,如果有就包含玩郊,沒(méi)有的話就會(huì)再去Xcode的編譯器目錄下去查找是否有這個(gè)文件,如果有則直接包含進(jìn)來(lái)枉阵,如果這時(shí)還沒(méi)有译红,則報(bào)錯(cuò)



Xcode編譯器目錄

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include



   
2)#include  <文件名稱>

直接去Xcode編譯器目錄去查找這個(gè)文件,如果有就包含進(jìn)來(lái)兴溜,如果沒(méi)有就報(bào)錯(cuò)





###3侦厚、 #include<stdio.h>的分析

我們學(xué)過(guò)函數(shù)后知道反璃,如果要調(diào)用某個(gè)函數(shù),必須在調(diào)用之前對(duì)這個(gè)函數(shù)進(jìn)行申明假夺,而之前我們所用的printf("")   scanf("")都是函數(shù)淮蜈,只不過(guò)這些是系統(tǒng)給我們寫好的函數(shù),如果沒(méi)有進(jìn)行申明直接調(diào)用會(huì)報(bào)錯(cuò)已卷,

所以我們需要對(duì)其進(jìn)行申明梧田,而這些函數(shù)申明的內(nèi)容,都包含在蘋果為我們提供的Xcode編譯器里的各種文件里了侧蘸,我們只要用#include指令包含進(jìn)來(lái)就行了裁眯!





###4、#include規(guī)范



如果是我們自己寫的文件讳癌,放在代碼文件里穿稳,并且用""包含

如果是編譯器提供的頭文件,則用<>包含








###十三【掌握】多文件開發(fā)

思考:實(shí)現(xiàn)微信搖一搖有哪些功能步驟晌坤?
我們實(shí)際開發(fā)中的項(xiàng)目逢艘,基本都是團(tuán)隊(duì)協(xié)作開發(fā),每人負(fù)責(zé)一個(gè)模塊(功能)骤菠,這樣比較利于項(xiàng)目的快速開發(fā)它改。


案例:

模塊:數(shù)學(xué)功能

將1個(gè)功能模塊的函數(shù)應(yīng)該單獨(dú)的寫在1個(gè)文件之中. 每1個(gè)模塊1個(gè)文件.



新建1個(gè).c文件.在這個(gè).c文件之中寫上相關(guān)的函數(shù).  在要調(diào)用的地方, 先聲明函數(shù)以后才能調(diào)用.





    這么做可能存在的問(wèn)題:

1). 如果寫模塊的人 新增了1個(gè)函數(shù) 那么調(diào)用者就還要去聲明這個(gè)函數(shù).

2). 如果寫模塊的人 改了函數(shù)不通知調(diào)用者的話 也會(huì)出問(wèn)題.



    正確的做法:

1). 寫模塊的人寫兩個(gè)文件 .c文件 .h文件.  header頭文件.

.h文件中寫這個(gè)模塊中的函數(shù)的聲明.

.c文件中寫這個(gè)模塊中的函數(shù)的實(shí)現(xiàn).





2). 調(diào)用模塊功能的人 只需要包含頭文件就可以 調(diào)用模塊中的函數(shù).







4. 模塊.
 1個(gè)模塊至少包含2個(gè)文件

   .h文件

   .c文件




###十四【理解】抽查問(wèn)題
1商乎、為什么需要使用函數(shù)央拖?





2、函數(shù)的基本格式





3鹉戚、全局變量和局部變量有什么不同鲜戒?





4、return抹凳、break遏餐、continue的異同





5、給形參重新賦值會(huì)影響實(shí)參嗎





6却桶、函數(shù)內(nèi)部可以再定義一個(gè)函數(shù)嗎境输?





7、函數(shù)可以重名嗎颖系?





8嗅剖、#include的本質(zhì)是什么?





9嘁扼、#include后面使用""和使用<>有什么不同信粮?








最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市趁啸,隨后出現(xiàn)的幾起案子强缘,更是在濱河造成了極大的恐慌督惰,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旅掂,死亡現(xiàn)場(chǎng)離奇詭異赏胚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)商虐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門觉阅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人秘车,你說(shuō)我怎么就攤上這事典勇。” “怎么了叮趴?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵割笙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我眯亦,道長(zhǎng)伤溉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任搔驼,我火速辦了婚禮谈火,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘舌涨。我一直安慰自己,他們只是感情好扔字,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布囊嘉。 她就那樣靜靜地躺著,像睡著了一般革为。 火紅的嫁衣襯著肌膚如雪扭粱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天震檩,我揣著相機(jī)與錄音琢蛤,去河邊找鬼。 笑死抛虏,一個(gè)胖子當(dāng)著我的面吹牛博其,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迂猴,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼慕淡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了沸毁?” 一聲冷哼從身側(cè)響起峰髓,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤傻寂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后携兵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡徐紧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年静檬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浪汪。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巴柿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出死遭,到底是詐尸還是另有隱情广恢,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布呀潭,位于F島的核電站钉迷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钠署。R本人自食惡果不足惜糠聪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谐鼎。 院中可真熱鬧舰蟆,春花似錦、人聲如沸狸棍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)草戈。三九已至塌鸯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唐片,已是汗流浹背丙猬。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留费韭,地道東北人茧球。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像揽思,于是被迫代替她去往敵國(guó)和親袜腥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1、c語(yǔ)言的函數(shù)有以下特點(diǎn): (1)才源程序由函數(shù)組成羹令,一個(gè)主函數(shù)main()+若干其他函數(shù) C程序中的函數(shù)類似文...
    滕王閣序閱讀 1,343評(píng)論 0 6
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,519評(píng)論 1 51
  • 原文地址:C語(yǔ)言函數(shù)調(diào)用棧(一)C語(yǔ)言函數(shù)調(diào)用棧(二) 0 引言 程序的執(zhí)行過(guò)程可看作連續(xù)的函數(shù)調(diào)用鲤屡。當(dāng)一個(gè)函數(shù)執(zhí)...
    小豬啊嗚閱讀 4,616評(píng)論 1 19
  • 函數(shù)的概述一個(gè)較大的程序可分為若干個(gè)程序模塊,每一個(gè)模塊用來(lái)實(shí)現(xiàn)一個(gè)特定的功能。在高級(jí)語(yǔ)言中用子程序?qū)崿F(xiàn)模塊的功能...
    Eric_Hunter閱讀 1,023評(píng)論 0 0
  • 如果以上面的2005年這個(gè)時(shí)間為準(zhǔn),買這本書的時(shí)候大約是2008年左右肪凛,如今已經(jīng)過(guò)去了大約九年的時(shí)間堰汉。考慮到自己還...
    破繭之旅閱讀 337評(píng)論 0 0