C和C指針小記(十)-函數

一、函數的定義

函數的定義就是函數體的實現.
語法:
類型
函數名(形式參數)
代碼塊swift

函數返回類型和函數名分開寫是代碼風格的問題,現代語言如swift返回值在函數名和參數表的後面,這樣使得某些工程工具追蹤源代碼時更容易查找函數名.數組

K&RC 的舊式聲明:
int *
find_int(key, array, array_len)
int key;
int array[];
int array_len;
{
}函數

爲了兼容一些舊的編譯器,C標準保留了這種聲明格式工具

二、函數的聲明

2.1 函數原型 (function prototype)

函數原型用於向編譯器提供函數信息.格式上就是函數定義的起始部分+分號.

2.2 函數的缺省認定

當程序調用一個沒法見到原型的函數時,編譯器便認爲該函數返回一個整型值.

三、函數的參數

C函數的全部參數均以「傳值調用」方式進行傳遞,這意味着函數將得到參數值的一份拷貝.這樣函數能夠放心的修改這個值,而沒必要擔憂會修該調用程序實際傳遞給它的參數.
有個例外,若是被傳遞的參數是一個數組名,而且在函數中使用下標引用該數組的參數,那麼在函數中對數組元素進行修改實際上修改的是調用程序中的數組元素.函數將訪問調用程序的數組元素,數組並不會被複制,這就是「傳址調用」
可是,實際上,傳遞數組作爲參數時是傳遞的指針的一個拷貝.從這個角度考慮,C函數的全部參數均以傳值調用.prototype

傳值點用的一個例子:指針

/**
 對值進行奇偶校驗

 @param value 整型參數值
 @param n_bits 數值的有效位數
 @return 1 : 偶數個 0 : 奇數個
 */
int
even_parity(int value, int n_bits){
    int parity = 0;
    //計數值中值爲1的位的個數
    while (n_bits > 0) {
        parity += value & 1;
        value >>= 1;
        n_bits -= 1;
    }
    //若是計數器的最低位是0,返回TRUE,表示1的位數爲偶數個
    return (parity % 2) == 0;
}
//交換調用程序中的兩個整數值(無效),由於它實際交換的是參數的拷貝
void
swapX(int x, int y)
{
    int temp;
    temp = x;
    x = y;
    y = temp;
}

//傳遞指向但願修改的變量的指針,
void
swap(int *x, int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

//調用時
swap (&a, &b);//要傳遞指針
相關文章
相關標籤/搜索