黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

【C語言】10-函數(shù)

系統(tǒng) 2679 0

一、基本概念

1.什么是函數(shù)

任何一個C語言程序都是由一個或者多個程序段(小程序)構(gòu)成的,每個程序段都有自己的功能,我們一般稱這些程序段為“函數(shù)”。所以,你可以說C語言程序是由函數(shù)構(gòu)成的。

比如你用C語言編寫了一個MP3播放器程序,那么它的程序結(jié)構(gòu)如下圖所示:

【C語言】10-函數(shù)

  • 從上圖可以看出: 函數(shù)就是用來實現(xiàn)某個功能的程序段,每一個函數(shù)都有自己的功能 。因此,你應(yīng)該把實現(xiàn)某個功能所需的代碼都寫在函數(shù)中。比如,有個函數(shù)的功能是播放MP3,那么播放MP3的代碼都應(yīng)該寫到這個函數(shù)中。
  • 當調(diào)用(執(zhí)行)一個函數(shù)時,計算機就會按順序執(zhí)行函數(shù)中的所有代碼,從而展示函數(shù)所實現(xiàn)的功能。

2.函數(shù)名

一般來說,我們會將不同的功能交給不同的函數(shù)去實現(xiàn)。比如,將暫停播放MP3的代碼寫到一個函數(shù)中,將停止播放MP3的代碼寫到另一個函數(shù)中。因此,一個C程序中可能會有很多的函數(shù)。為了方便調(diào)用和區(qū)分這些函數(shù),我們需要為每一個函數(shù)都起一個唯一的名稱,函數(shù)的命名必須按照標示符命名規(guī)則。利用函數(shù)名就可以調(diào)用到對應(yīng)的函數(shù)。

二、函數(shù)的定義

1.任何一個函數(shù)在使用之前都必須進行定義

定義函數(shù)的目的就是為了寫清楚你這個函數(shù)是干啥用的,里面包含了哪些代碼。函數(shù)的定義格式如下:

      
        1
      
      
        返回值類型  函數(shù)名(形式參數(shù)列表)

      
      
        2
      
      
        {

      
      
        3
      
      
            函數(shù)體

      
      
        4
      
       }
    

2.舉例

比如定義一個函數(shù)用來計算兩個整數(shù)的和。那么可以寫成下面這樣:

      
         1
      
       #include <stdio.h>

      
         2
      
      
         3
      
      
        int
      
       sum(
      
        int
      
       a, 
      
        int
      
      
         b)

      
      
         4
      
      
        {

      
      
         5
      
      
        int
      
       c = a +
      
         b;

      
      
         6
      
      
        return
      
      
         c;

      
      
         7
      
      
        }

      
      
         8
      
      
         9
      
      
        int
      
      
         main()

      
      
        10
      
      
        {

      
      
        11
      
      
        int
      
       d = sum(
      
        10
      
      , 
      
        11
      
      
        );

      
      
        12
      
      
        13
      
           printf(
      
        "
      
      
        d is %d
      
      
        "
      
      
        , d);

      
      
        14
      
      
        return
      
      
        0
      
      
        ;

      
      
        15
      
       }
    
  • 分別在第3行、第9行定義了sum函數(shù)、main函數(shù),其中sum函數(shù)的作用是計算兩個整數(shù)的和。
  • 函數(shù)定義好后,并不會馬上執(zhí)行函數(shù)內(nèi)部的代碼,要有人調(diào)用它才會執(zhí)行內(nèi)部的代碼。就好像你的手機雖然有打電話的功能,但是只有按了撥號鍵,才會執(zhí)行打電話的功能。
  • 程序運行時就會先調(diào)用main函數(shù),按順序執(zhí)行第11~14行代碼,因為main函數(shù)是程序的入口
  • 第11行的sum(10, 11)是調(diào)用sum函數(shù),sum函數(shù)被調(diào)用了,就會分配存儲空間給形式參數(shù)列表中的所有參數(shù),也就是第3行中的變量a和變量b,它們都是“形式參數(shù)”
  • 第11行中的10、11稱為“實際參數(shù)”,它們將分別賦值給變量a、變量b,也就是相當于
      
        1
      
      
        int
      
       a = 
      
        10
      
      
        ;

      
      
        2
      
      
        int
      
       b = 
      
        11
      
      ;
    
  • 既然調(diào)用了sum函數(shù),就會按順序執(zhí)行sum函數(shù)中的代碼,也就是第5~6行代碼。
  • 第5行將a+b的值21賦值給了變量c,第6行使用return關(guān)鍵字將變量c返回給了函數(shù)調(diào)用者,也是說,第11行sum(10, 11)的值是21。那么變量d的值就是21。
  • 第13行的輸出結(jié)果為:
      d 
      
        is
      
       21
    
  • 第3~7行中的變量a、b、c都只有在調(diào)用sum函數(shù)時,才會分配存儲空間,當sum函數(shù)執(zhí)行完畢后,變量a、b、c就會被釋放存儲空間。因此,它們的作用域僅限于sum函數(shù)內(nèi)部。
  • 第3行sum左邊的int稱為“返回值類型”,第6行return關(guān)鍵字后面跟著的數(shù)值稱為“返回值”,因此第6行的變量c就是返回值,返回值的數(shù)據(jù)類型應(yīng)該跟“返回值類型”保持一致。

三、形式參數(shù)和實際參數(shù)

1.基本概念

1> 形式參數(shù): 定義 函數(shù)時, 函數(shù)名后面的小括號()中定義的變量稱為形式參數(shù),簡稱形參

2> 實際參數(shù): 在調(diào)用函數(shù)時傳入的值稱為實際參數(shù) ,簡稱實參

2.調(diào)用函數(shù)時傳遞的實參個數(shù) 必須和 函數(shù)的形參個數(shù)必須保持一致

      
         1
      
      
        int
      
       sum(
      
        int
      
       a, 
      
        int
      
       b, 
      
        int
      
      
         c)

      
      
         2
      
      
        {

      
      
         3
      
      
        return
      
       a + b +
      
         c;

      
      
         4
      
      
        }

      
      
         5
      
      
         6
      
      
        int
      
      
         main()

      
      
         7
      
      
        {

      
      
         8
      
           sum(
      
        10
      
      , 
      
        9
      
      , 
      
        7
      
      
        );

      
      
         9
      
      
        return
      
      
        0
      
      
        ;

      
      
        10
      
       }
    

第1行中sum函數(shù)中有3個形參,因此在第8行調(diào)用sum函數(shù)時,需要傳入3個實參

3.當使用基本數(shù)據(jù)類型(char、int、float等)作為實參時,實參和形參之間只是值傳遞,修改形參的值并不影響到實參

      
         1
      
       #include <stdio.h>

      
         2
      
      
         3
      
      
        int
      
       test(
      
        char
      
      
         a)

      
      
         4
      
      
        {

      
      
         5
      
           a = 
      
        10
      
      
        ;

      
      
         6
      
      
         7
      
      
        return
      
      
        0
      
      
        ;

      
      
         8
      
      
        }

      
      
         9
      
      
        10
      
      
        int
      
      
         main()

      
      
        11
      
      
        {

      
      
        12
      
      
        char
      
       b = 
      
        5
      
      
        ;

      
      
        13
      
      
        14
      
      
            test(b);

      
      
        15
      
      
        16
      
           printf(
      
        "
      
      
        b的值是%d
      
      
        "
      
      
        , b);

      
      
        17
      
      
        18
      
      
        return
      
      
        0
      
      
        ;

      
      
        19
      
       }
    
  • 在第3行定義了test函數(shù),只有一個形參a
  • 在第14行調(diào)用了test函數(shù),接著就會分配內(nèi)存給變量a。這里將變量b當做實參,那么變量b的值將傳遞給變量a。這個時候,內(nèi)存中大致如下圖所示:

(其實在內(nèi)存中存儲的是二進制數(shù)據(jù),這里我寫成10進制是為了直觀性)

  • 執(zhí)行完第5行代碼后,變量a的值變成了10,但是變量b的值依然是5

  • 第16行代碼的輸出結(jié)果是:
      b的值是5
    

因此,在函數(shù)內(nèi)部修改了形參的值,并不會影響到外面的實參。

4.函數(shù)可以沒有形參

定義一個函數(shù)時是可以沒有形參的,比如下面的函數(shù)

      
         1
      
       #include <stdio.h>

      
         2
      
      
         3
      
      
        int
      
      
         test()

      
      
         4
      
      
        {

      
      
         5
      
           printf(
      
        "
      
      
        調(diào)用了test函數(shù)
      
      
        "
      
      
        );

      
      
         6
      
      
        return
      
      
        0
      
      
        ;

      
      
         7
      
      
        }

      
      
         8
      
      
         9
      
      
        int
      
      
         main()

      
      
        10
      
      
        {

      
      
        11
      
      
            test();

      
      
        12
      
      
        return
      
      
        0
      
      
        ;

      
      
        13
      
       }
    
  • 在第3行定義了test函數(shù),可以發(fā)現(xiàn),它的形參列表是空的,也就是沒有形參
  • 那么在第11行調(diào)用test函數(shù)時,就不用傳遞任何實參
  • 其實,第9行定義的main函數(shù)也是沒有形參的

四、返回值類型

1.返回值就是函數(shù)調(diào)用完后,返回給函數(shù)調(diào)用者的結(jié)果,用return關(guān)鍵字進行返回。定義函數(shù)時,要指明函數(shù)的返回值類型

      
         1
      
      
        double
      
      
         pi()

      
      
         2
      
      
        {

      
      
         3
      
      
        return
      
      
        3.4
      
      
        ;

      
      
         4
      
      
        }

      
      
         5
      
      
         6
      
      
        int
      
      
         main()

      
      
         7
      
      
        {

      
      
         8
      
      
        double
      
       a =
      
         pi();

      
      
         9
      
      
        return
      
      
        0
      
      
        ;

      
      
        10
      
       }
    
  • 第1行定義了一個pi函數(shù),返回值類型是double,因此用return返回的數(shù)值應(yīng)該是double類型的,這里返回的是3.14
  • 第8行pi函數(shù)調(diào)用完畢后,函數(shù)調(diào)用者得到的值就是3.14,因此,變量a的值是3.14

2.一個函數(shù)可以沒有返回值,如果沒有返回值,應(yīng)該用void表示返回值類型

      
         1
      
       #include <stdio.h>

      
         2
      
      
         3
      
      
        void
      
      
         test()

      
      
         4
      
      
        {

      
      
         5
      
           printf(
      
        "
      
      
        調(diào)用了test函數(shù)
      
      
        "
      
      
        );

      
      
         6
      
      
        return
      
      
        ;

      
      
         7
      
      
        }

      
      
         8
      
      
         9
      
      
        int
      
      
         main()

      
      
        10
      
      
        {

      
      
        11
      
      
            test();

      
      
        12
      
      
        return
      
      
        0
      
      
        ;

      
      
        13
      
       }
    
  • 在第3行定義了一個test函數(shù),它是沒有返回值的,所以第6行的return后面沒有跟上任何數(shù)值
  • 在第11行調(diào)用了test函數(shù)

3.如果一個函數(shù)沒有返回值,最后面的return語句可以省略

所以,上面的test函數(shù)可以簡化成:

      
        1
      
      
        void
      
      
         test()

      
      
        2
      
      
        {

      
      
        3
      
           printf(
      
        "
      
      
        調(diào)用了test函數(shù)
      
      
        "
      
      
        );

      
      
        4
      
       }
    

4.如果一個函數(shù)沒有明確寫出返回值類型,那么代表這個函數(shù)的返回值類型是int

      
        1
      
       sum(
      
        int
      
       a, 
      
        int
      
      
         b)

      
      
        2
      
      
        {

      
      
        3
      
      
        return
      
       a +
      
         b;

      
      
        4
      
       }
    

可以看到,第1行定義的sum函數(shù)沒有明確寫出返回值類型,那么這個sum函數(shù)的返回值類型就是int。因此,第3行return后面跟隨的是int類型數(shù)據(jù)

五、return

1.return語句可以在函數(shù)內(nèi)部返回一個值給函數(shù)調(diào)用者

      
         1
      
      
        int
      
       sum(
      
        int
      
       a, 
      
        int
      
      
         b)

      
      
         2
      
      
        {

      
      
         3
      
      
        return
      
       a +
      
         b;

      
      
         4
      
      
        }

      
      
         5
      
      
         6
      
      
        int
      
      
         main()

      
      
         7
      
      
        {

      
      
         8
      
      
        int
      
       c = sum(
      
        5
      
      , 
      
        8
      
      
        );

      
      
         9
      
      
        return
      
      
        0
      
      
        ;

      
      
        10
      
       }
    

第3行使用了return語句,將a+b的值返回給了函數(shù)調(diào)用者,因此第8行變量c的值是13

2.一個函數(shù)內(nèi)部可以多次使用return語句,使用了return語句后,函數(shù)就會馬上停止執(zhí)行,return語句后面的代碼就不再被執(zhí)行

      
        1
      
      
        int
      
       max(
      
        int
      
       a, 
      
        int
      
      
         b)

      
      
        2
      
      
        {

      
      
        3
      
      
        if
      
       (a>
      
        b)

      
      
        4
      
      
            {

      
      
        5
      
      
        return
      
      
         a;

      
      
        6
      
      
            }

      
      
        7
      
      
        8
      
      
        return
      
      
         b;

      
      
        9
      
       }
    
  • 這個max函數(shù)可以用來求出兩個整數(shù)中的最大值
  • 如果a大于b,就執(zhí)行第5行代碼,直接將a返回,函數(shù)就會停止執(zhí)行。也就是說,后面的第8行代碼就不會被執(zhí)行
  • 如果a不大于b,就執(zhí)行第8行代碼,將b返回

六、函數(shù)定義的注意

1.函數(shù)名不能重復(fù)

默認情況下,函數(shù)的名字必須唯一。下面的寫法是 錯誤 的:

      
        1
      
      
        void
      
       test(
      
        int
      
      
         a)

      
      
        2
      
      
        {

      
      
        3
      
      
        4
      
      
        }

      
      
        5
      
      
        6
      
      
        int
      
      
         test()

      
      
        7
      
      
        {

      
      
        8
      
      
        return
      
      
        10
      
      
        ;

      
      
        9
      
       }
    

第1、6行定義的函數(shù)的名稱都是test,編譯器會直接報錯

2.每一個函數(shù)都應(yīng)該獨立定義,不能嵌套定義

下面的寫法是 錯誤 的:

      
        1
      
      
        int
      
      
         main()

      
      
        2
      
      
        {

      
      
        3
      
      
        void
      
      
         test()

      
      
        4
      
      
            {

      
      
        5
      
      
        6
      
      
            }

      
      
        7
      
      
        8
      
      
        return
      
      
        0
      
      
        ;

      
      
        9
      
       }
    

在第3行把test函數(shù)定義在了main函數(shù)內(nèi)部,這是錯誤的寫法

七、常見函數(shù)

1.main函數(shù)

第一個C語言程序 開始,就認識了這個main函數(shù)。main函數(shù)是整個C程序的入口,有了main函數(shù),C程序才能運行成功,而且整個C程序中只能有一個main函數(shù)。

main函數(shù)的簡單定義如下:

      
        1
      
      
        int
      
      
         main()

      
      
        2
      
      
        {

      
      
        3
      
      
        4
      
      
        return
      
      
        0
      
      
        ;

      
      
        5
      
       }
    

它可以沒有形式參數(shù),返回值是int類型。它的返回值用于說明程序的退出狀態(tài):如果返回0,則代表程序正常退出,否則代表程序異常退出

2.printf函數(shù)

你可能已經(jīng)注意到,平時一直在使用的printf其實也是一個函數(shù),這是系統(tǒng)自帶的函數(shù)

      
        1
      
       #include <stdio.h>

      
        2
      
      
        3
      
      
        int
      
      
         main()

      
      
        4
      
      
        {

      
      
        5
      
      
        6
      
           printf(
      
        "
      
      
        我要學習iOS開發(fā)
      
      
        "
      
      
        );

      
      
        7
      
      
        8
      
      
        return
      
      
        0
      
      
        ;

      
      
        9
      
       }
    
  • 在第6行調(diào)用了printf函數(shù),傳入的參數(shù)是一個 字符串常量 :"我要學習iOS開發(fā)"
  • printf函數(shù)的作用是在屏幕上輸出內(nèi)容
  • 注意第1行代碼,如果你使用了printf函數(shù),就要加上這一句,至于原因,會在后面的章節(jié)詳細介紹

【C語言】10-函數(shù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論