最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言函數(shù)語(yǔ)法詳解

 更新時(shí)間:2015年02月28日 10:16:51   投稿:hebedich  
本文是小結(jié)了一下C語(yǔ)言的函數(shù)語(yǔ)法,詳細(xì)介紹了C語(yǔ)言函數(shù)語(yǔ)法的概述、函數(shù)的定義、函數(shù)的返回值、函數(shù)調(diào)用等7個(gè)方面的內(nèi)容,非常詳細(xì),這里推薦給小伙伴們。

1、概述

        在C語(yǔ)言中,函數(shù)是來(lái)完成子程序或者某個(gè)模塊的功能。有主程序或者其他函數(shù)調(diào)用,其他函數(shù)之間可以相互調(diào)用。同一函數(shù)可以被一個(gè)或多個(gè)函數(shù)任意次調(diào)用。
注意:
    a、一個(gè)C程序有一個(gè)或多個(gè)程序模塊組成,每一個(gè)程序模塊作為一個(gè)源程序文件。一個(gè)源文件可以為多個(gè)C程序共用。
    b、程序在編譯時(shí)是以源文件為單位進(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。一個(gè)源文件就是一個(gè)編譯單元
    c、C程序的執(zhí)行是從main函數(shù)開始,也是在main函數(shù)中結(jié)束整個(gè)程序
    d、所有函數(shù)是平行的,即在定義函數(shù)時(shí)是分別進(jìn)行的,是互相獨(dú)立的。一個(gè)函數(shù)并不從屬于另一個(gè)函數(shù),即函數(shù)不能嵌套定義。函數(shù)之間可以相互調(diào)用,但不能調(diào)用main函數(shù)。main函數(shù)是系統(tǒng)調(diào)用的。
    e、從用戶使用角度看,函數(shù)分為兩種:
        (1)標(biāo)準(zhǔn)函數(shù)。標(biāo)準(zhǔn)函數(shù)即函數(shù)庫(kù),它由系統(tǒng)提供。不同的C語(yǔ)言編譯系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)的數(shù)量和功能或有不同,但是基本函數(shù)是一樣的。
        (2)用戶自定義函數(shù)。
    f、從函數(shù)形式看,函數(shù)分為兩種:
        (1)有參函數(shù)。
        (2)無(wú)參函數(shù)。在調(diào)用函數(shù)時(shí),主調(diào)函數(shù)通過(guò)參數(shù)向被調(diào)函數(shù)傳遞數(shù)據(jù)

2、函數(shù)的定義

定義無(wú)參函數(shù)的一般形式:
類型表示符 函數(shù)名()
{
    聲明部分
    語(yǔ)句部分
}
【實(shí)】定義無(wú)參函數(shù),輸出“Hello World”字符串

復(fù)制代碼 代碼如下:

void show()
{
    printf("Hello World");
}

定義有參函數(shù)的一般形式:
類型標(biāo)識(shí)符 函數(shù)名(形式參數(shù)列表)
{
    聲明部分
    語(yǔ)句部分
}
【例】傳遞兩個(gè)int的參數(shù)a和b,然后計(jì)算a加b的和,然后返回a加b的和。

復(fù)制代碼 代碼如下:

int add(int a, int b)
{
    int t = 0; // 聲明部分
    t = a + b;
    return t;
}

空函數(shù)就是沒有函數(shù)體的函數(shù),如:

void test(){ ... }

調(diào)用空函數(shù)時(shí),什么工作也不做,沒有任何實(shí)際作用。在程序設(shè)計(jì)中往往程序初期只實(shí)現(xiàn)基本功能,對(duì)于高級(jí)功能我們可以提供一空函數(shù),以后實(shí)現(xiàn)該空函數(shù)。

定義函數(shù)時(shí)指定的參數(shù)稱為“形參”,調(diào)用函數(shù)時(shí)傳遞的參數(shù)稱為“實(shí)參”。
    a、在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存中的存儲(chǔ)單元。只有在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)中的形參才被分配內(nèi)存單元。在調(diào)用結(jié)束后,形參所占用的內(nèi)存單元也被釋放。
    b、實(shí)參可以是常量、變量或表達(dá)式,如:max(3, a+b);
    c、在被定義的函數(shù)中,必須指定形參的類型
    d、實(shí)參和形參的類型應(yīng)相同或賦值兼容。
    e、在C語(yǔ)言中,實(shí)參向形參數(shù)據(jù)傳遞是“值傳遞”,單向傳遞,只由實(shí)參傳遞給形參,而形參不能傳遞給實(shí)參。在內(nèi)存中形參和實(shí)參是不同的內(nèi)存單元。因此,改變形參的值不會(huì)影響實(shí)參的值。

3、函數(shù)的返回值

    通常,希望通過(guò)函數(shù)調(diào)用是主調(diào)函數(shù)能得到一個(gè)確定的值,這就是函數(shù)的返回值。
    a、函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句獲得的。return語(yǔ)句將被調(diào)用函數(shù)中的一個(gè)確定值帶回主調(diào)函數(shù)中去。如果需要從被調(diào)用函數(shù)帶回一個(gè)函數(shù)值,被調(diào)函數(shù)中必須包含return語(yǔ)句。如果不需要從被調(diào)函數(shù)帶回函數(shù)值可以不需要return語(yǔ)句。一個(gè)函數(shù)可以有多個(gè)return語(yǔ)句,執(zhí)行到哪個(gè)return語(yǔ)句,哪個(gè)語(yǔ)句就起作用。
    b、函數(shù)值的類型。既然函數(shù)有返回值,這個(gè)值當(dāng)然應(yīng)屬于某一個(gè)確定的類型,應(yīng)當(dāng)在定義函數(shù)時(shí)指定函數(shù)值的類型。C語(yǔ)言中,凡是不加類型說(shuō)明的函數(shù),自動(dòng)按整型處理。在Turbo C 2.0中不寫返回類型可以通過(guò),Turbo C++ 3.0編譯時(shí)不能通過(guò)。所以建議讀者在定義時(shí)對(duì)所有函數(shù)都指定函數(shù)類型。
    c、在定義函數(shù)是指定的類型應(yīng)該與return返回類型一致。如果函數(shù)值的類型和return語(yǔ)句中表達(dá)式值類型不一致,則按照函數(shù)類型為準(zhǔn)。
    d、對(duì)于不帶回值的函數(shù),應(yīng)當(dāng)用“void”定義函數(shù)為“無(wú)類型”或稱“空類型”。此時(shí)函數(shù)體中不得出現(xiàn)return語(yǔ)句。

4、函數(shù)調(diào)用
    函數(shù)調(diào)用的一般形式為:函數(shù)名(實(shí)參列表);如:

復(fù)制代碼 代碼如下:

int a = max(2, 4);

按函數(shù)在程序中出現(xiàn)的位置來(lái)分,可以有以下3種函數(shù)調(diào)用方式:
    a、函數(shù)語(yǔ)句。把函數(shù)調(diào)用作為一個(gè)語(yǔ)句。此時(shí)不許要函數(shù)返回值。如: show();
    b、函數(shù)表達(dá)式。函數(shù)出現(xiàn)在一個(gè)表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式,需要函數(shù)返回一個(gè)確定的值。如:a = 2*max(a, b);
    c、函數(shù)參數(shù)。函數(shù)調(diào)用作為一個(gè)函數(shù)的參數(shù)。如:m = max(a, max(b, c));

5、對(duì)被調(diào)函數(shù)的聲明和函數(shù)原型

    在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)需要具備以下條件:
    a、被調(diào)函數(shù)必須是已經(jīng)存在的函數(shù)
    b、如果使用函數(shù)庫(kù),還應(yīng)該在文本文件開頭用#include命令將調(diào)用有關(guān)庫(kù)函數(shù)時(shí)所需用到的信息“包含”到本文件中來(lái)。如:#include <stdio.h>
        其中“stdio.h”是一個(gè)“頭文件”。在stdio.h文件中包含了輸入輸出庫(kù)函數(shù)所用到的一些宏定義信息。如果不包含stdio.h文件的信息,就無(wú)法使用輸入輸出庫(kù)中的函數(shù)。
    c、如果使用用戶自己定義的函數(shù),而該函數(shù)的位置在調(diào)用它的函數(shù)的后面(在同一個(gè)文件中),應(yīng)該在主調(diào)函數(shù)中對(duì)被調(diào)用的函數(shù)進(jìn)行聲明。如:

復(fù)制代碼 代碼如下:

#include <stdio.h>
void main()
{
    float add(float x, float y); // 或者: float add(float, float);
    float a, b, c;
    scanf("%f%f", &a, &b);
    c = add(a, b);
    printf("sum is %f\n", c);
}
float add(float x, float y)
{
    return x + y;
}

6、局部變量和全局變量

a、局部變量
        在一個(gè)函數(shù)內(nèi)部定義的變量是內(nèi)部變量,它只能在函數(shù)范圍內(nèi)才有效,也就是說(shuō)只在本函數(shù)內(nèi)才能使用它們,在此函數(shù)外部不能使用這些變量。如:

復(fù)制代碼 代碼如下:

float f1(int a)
{
    int b, c;     // b、c變量只在f1函數(shù)內(nèi)部有效
}
char f2(int x, int y)
{
    int i, j;     // i、j變量在f2函數(shù)內(nèi)部有效
}
void main()
{
    int m, n;  // m、n變量在main函數(shù)中有效
}

注意:
    1)主函數(shù)中定義的變量(m、n)也只在主函數(shù)中有效,而不因?yàn)樵谥骱瘮?shù)中定義而在整個(gè)文件或程序中有效。主函數(shù)也不能使用其他函數(shù)中定義的變量。
    2)不同函數(shù)中可以使用相同名字的變量,它們代表不同的對(duì)象,互不干擾。
    3)形式參數(shù)也是局部變量。
    4)在一個(gè)函數(shù)內(nèi)部可以在符合語(yǔ)句中定義變量,這些變量值在本符合語(yǔ)句中有效,這種符合語(yǔ)句稱為“分程序”或“程序塊”。如:

復(fù)制代碼 代碼如下:

void main()
{
    int a, b; // a和b在main函數(shù)內(nèi)部有效
    ……
    {
        int c;
        c = a + b; // c在該符合語(yǔ)句中有效
    }
}

b、全局變量
        在函數(shù)外部定義的變量就是全局變量。全局變量可以為本文件中其他函數(shù)所共用。它的有效范圍為從定義變量的位置開始到本源文件結(jié)束。如:

復(fù)制代碼 代碼如下:

int a, b;        // a、b的范圍從此處到源文件結(jié)尾
float f1()
{
    int b, c;
}
char c1, c2;    //  c1、c2的范圍是從此處到原文結(jié)尾
char f2()
{
    int i, j;
}
void main()
{
    int m, n;
}

注意:
    (1)全局變量是函數(shù)之間交換數(shù)據(jù)的一個(gè)渠道。一般第一個(gè)字母大寫
    (2)建議不再必要時(shí)不要使用全局變量。原因如下:全局變量在程序的全部過(guò)程中都占用存儲(chǔ)單元、使函數(shù)的通用性降低,因?yàn)橐蕾囃獠孔兞?、使用過(guò)多全局變量會(huì)降低程序的清晰性
    (3)如果全局變量和局部變量同名,則局部變量?jī)?yōu)先

7、變量的存儲(chǔ)類別

        從變量存在的生命周期來(lái)看,變量可以分為:靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式。所謂靜態(tài)存儲(chǔ)方式是指在程序運(yùn)行期間由系統(tǒng)分配固定的存儲(chǔ)空間的方式。而動(dòng)態(tài)存儲(chǔ)方式是在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。

內(nèi)存中的供用戶使用的存儲(chǔ)空間的情況。存儲(chǔ)空間分為三部分:
(1)程序區(qū)
(2)靜態(tài)存儲(chǔ)區(qū)。(存放:全局變量)內(nèi)存空間在程序開始時(shí)給全局變量賦值、分配空間,一直保存到程序運(yùn)行結(jié)束才釋放,
(3)動(dòng)態(tài)存儲(chǔ)區(qū)。(存放:函數(shù)形參、自動(dòng)變量、函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址等)調(diào)用時(shí)才分配空間,調(diào)用結(jié)束就釋放空間。
    在C語(yǔ)言中,每個(gè)變量和函數(shù)有兩個(gè)屬性:數(shù)據(jù)類型和數(shù)據(jù)的存儲(chǔ)類別。

存儲(chǔ)類別分為量大方式:
    1)、靜態(tài)存儲(chǔ)類別
    2)、動(dòng)態(tài)存儲(chǔ)類別

具體包含4種:自動(dòng)的(auto)、靜態(tài)的(static)、寄存器(register)、外部的(extern)
a、auto
b、static
c、register
d、extern

8、內(nèi)部函數(shù)和外部函數(shù)
a、內(nèi)部函數(shù)
        如果一個(gè)函數(shù)只能被本文件中其他函數(shù)調(diào)用,則稱為“內(nèi)部函數(shù)”。在定義內(nèi)部函數(shù)時(shí),在函數(shù)名和函數(shù)類型前面加上static。語(yǔ)法如下:

static 類型標(biāo)識(shí)符 函數(shù)名(形參列表);

例如:

復(fù)制代碼 代碼如下:

static int add(int a, int b);

        內(nèi)部函數(shù)又稱靜態(tài)函數(shù),因?yàn)樗怯胹tatic聲明的。使用內(nèi)部函數(shù),可以使函數(shù)的作用域只局限于所在文件,在不同的文件中有同名的內(nèi)部函數(shù),互不干擾。

如:Test.c文件調(diào)用Test2.c文件中的void show()方法,輸出“Hello World”。
源文件:Test.c

復(fù)制代碼 代碼如下:

#include <stdio.h>
void main()
{
    extern void show();
    show();
}

源文件:Test2.c

復(fù)制代碼 代碼如下:

#include <stdio.h>
void show ()
{
    printf("Hello World\n");
}

b、外部函數(shù)。
        在定義函數(shù)時(shí),如果在函數(shù)首部的最左端加關(guān)鍵字extern,則表示此函數(shù)是外部函數(shù),可以供其他文件調(diào)用。如:

復(fù)制代碼 代碼如下:

extern int max(int a, int b);  // 可以為其他文件調(diào)用

C語(yǔ)言規(guī)定,如果在定義函數(shù)時(shí)省略extern,則隱含為外部函數(shù)。
   
        在需要調(diào)用此函數(shù)的文件中,用extern對(duì)函數(shù)作聲明,表示該函數(shù)是在其他文件中定義的外部函數(shù)。

如:Test.c文件調(diào)用Test3.c文件中int add(int a, int b)方法,然后返回值,再將返回值傳遞給Test2.c文件中的show(int result)方法顯示出來(lái)。
源文件:Test.c

復(fù)制代碼 代碼如下:

#include <stdio.h>
void main()
{
    extern void show(int result);
    extern int add(int a, int b);
    int result = 0;
    result = add(2, 3);
    show(result);
}

源文件:Test2.c

復(fù)制代碼 代碼如下:

#include <stdio.h>
void show (result)
{
    printf("result=%d\n", result);
}

源文件:Test3.c

復(fù)制代碼 代碼如下:

#include <stdio.h>
int add(int a, int b)
{
    return a + b;
}

小伙伴們是否對(duì)C語(yǔ)言的函數(shù)語(yǔ)法理解的更深刻了呢,希望大家能夠喜歡本文。

相關(guān)文章

  • c++11多線程編程之std::async的介紹與實(shí)例

    c++11多線程編程之std::async的介紹與實(shí)例

    這篇文章主要給大家介紹了關(guān)于c++11多線程編程之std::async的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C++日歷拼圖的解法你了解嗎

    C++日歷拼圖的解法你了解嗎

    這篇文章主要為大家詳細(xì)介紹了日歷拼圖C++的解法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C語(yǔ)言中數(shù)組的一些基本知識(shí)小結(jié)

    C語(yǔ)言中數(shù)組的一些基本知識(shí)小結(jié)

    這篇文章主要介紹了C語(yǔ)言中數(shù)組的一些基本知識(shí)小結(jié),其中重點(diǎn)是對(duì)于數(shù)組的內(nèi)存分配相關(guān)方面的知識(shí)整理,需要的朋友可以參考下
    2016-04-04
  • 算法詳解之分支限界法的具體實(shí)現(xiàn)

    算法詳解之分支限界法的具體實(shí)現(xiàn)

    這篇文章主要介紹了算法詳解之分支限界法的具體實(shí)現(xiàn),需要的朋友可以參考下
    2014-02-02
  • C++的頭文件和實(shí)現(xiàn)文件詳解

    C++的頭文件和實(shí)現(xiàn)文件詳解

    這篇文章主要介紹了C++的頭文件和實(shí)現(xiàn)文件詳解的相關(guān)資料,需要的朋友可以參考下
    2015-01-01
  • C++快速冪與大數(shù)取模算法示例

    C++快速冪與大數(shù)取模算法示例

    這篇文章主要介紹了C++快速冪算法和大數(shù)取模算法的示例,對(duì)C++程序員來(lái)說(shuō)有一定的幫助,有需要的朋友可以參考借鑒,下面來(lái)一起看看。
    2016-08-08
  • C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼

    C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼,感興趣的朋友可以參考一下
    2016-05-05
  • 講解C語(yǔ)言編程中指針賦值的入門實(shí)例

    講解C語(yǔ)言編程中指針賦值的入門實(shí)例

    這篇文章主要介紹了講解C語(yǔ)言編程中指針賦值的入門實(shí)例,通過(guò)const int i與int *const pi這樣兩個(gè)例子來(lái)分析指針的賦值和地址指向,需要的朋友可以參考下
    2015-12-12
  • 從匯編看c++中引用與指針的使用分析

    從匯編看c++中引用與指針的使用分析

    在c++中,引用和指針具有相同的作用,都可以用來(lái)在函數(shù)里面給變函數(shù)外面對(duì)象或者變量的值,下面就來(lái)看他們的原理
    2013-05-05
  • Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測(cè)的示例

    Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測(cè)的示例

    本文主要介紹了Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測(cè)的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論

永川市| 乐至县| 达尔| 东乌珠穆沁旗| 博湖县| 吐鲁番市| 怀柔区| 增城市| 桃园市| 上饶市| 金湖县| 黔东| 巴里| 德州市| 临朐县| 南华县| 青神县| 沙洋县| 雷州市| 黑龙江省| 高陵县| 建阳市| 景泰县| 富民县| 麻城市| 萨迦县| 峨山| 项城市| 乌海市| 闽清县| 龙游县| 阿鲁科尔沁旗| 玉林市| 京山县| 嘉禾县| 璧山县| 肇庆市| 石楼县| 隆德县| 石阡县| 左权县|