回覆列表
  • 1 # 使用者9101195118007

    假設主函式main()。其他函式void fun(int a,int *b)。

    關於函式定義和宣告:

    在程式碼中fun函式,有完整函式體的程式碼就是函式定義部分,比如void fun(int a,int *b){。。。};。

    如果沒有具體實現的函式體程式碼(也就是大括號內容),那麼就是函式宣告。比如void fun(int ,int *);

    關於函式宣告和呼叫:

    如果fun函式定義在main程式碼上面。比如:

    void fun(int a,int *b){。。。};

    int main(){

    int a=0,int b=0;

    ......

    fun(a,&b);//這裡fun定義程式碼在main上面,所以可以不需要宣告。反之需要先寫宣告語句

    return 0;

    }

    關於函式區域性變數及全域性變數:

    簡單區分:

    定義在函式之外的就是全域性變數,這個變數所有函式都可以直接使用,並且共用同一個地址。任意函式修改了變數值,其他函式呼叫也會變。

    定義在函式之內的就是區域性變數,區域性變數只屬於該函式,其他函式即使定義了同樣名字的變數,這兩個變數也不同地址,互不相干。

    比如:

    int a;//這就是全域性變數,作用域下所有函式共用

    int main()

    {

    int b;//這就是區域性變數,只在本函式有效,如果想在呼叫fun函式時讓fun也使用該變數,需要把這個變數的地址作為引數傳遞過去。

    printf("%d",b);

    return 0;

    }

    注意:c語言中允許區域性變數和全域性變數同名,但是同名的區域性變數會遮蔽全域性變數,實際程式碼避免同名。

    關於函式傳值和傳址:

    如函式void fun(int a,int *b){..........};這裡形參a 和*b,分別表示一個值和一個地址

    所以在呼叫該函式時,比如:

    int main()

    {

    int c,d;

    fun(c,&d);//這裡呼叫就對應上面形參型別,第一個引數傳遞了c的值(傳值),第二個引數傳遞了d的地址(傳址),這裡c和&d,叫做實參。當fun函式執行時改變了a和b指向地址的值,對應main函式中c的值不變,d的值改變。

    return 0;

    }

    順帶一說:區域性變數,在函式執行結束後會自動釋放,所以想把區域性變數地址作為返回值,需要用malloc函式申請。(這裡看不懂可以暫時忽視)

  • 中秋節和大豐收的關聯?
  • 為何吳昕和鄭凱的戀情曝光,卻沒有引起網友們激烈的討論?