天天看點

C語言——函數傳參最簡單稍微更新

        用C語言做開發的人都會知道,一個複雜的功能是可以拆分成一個一個的小功能,一個小功能就是一個或幾個函數。所有小功能的函數組合起來,複雜功能也就實作了。

        參數是每一個函數與外界溝通的接口,當然也可以通過全局變量、檔案等方式來實作函數間溝通,此片我隻說函數參數。

最簡單

int fun(int param)
{
    param *= 2;
    
    return param;
}

int main()
{
    int n_num = 5;

    fun(n_num);

    return 0;
}
           

   解釋:

   1)main()中的n_num被稱作實參,fun()的param被稱作形參。

   2)在main()中調用了fun(),此處發生了參數傳遞。将n_num的值5傳遞給了param,相當于用5給param進行了一次指派操作。

   3)  param和n_num是兩個獨立的變量。他們之間沒有關系,如果硬要說有關系的話,那就是用n_num的值對param進行了一次指派操作。

   4)既然是兩個獨立的變量,那麼對param的任何操作都不會影響到n_num的值。

稍微更新

int alloc_fun(int *p_param)
{
    p_param = malloc(10);
}

int main()
{
    int *buf = NULL;

    alloc_fun(buf);

    //buf操作,  error!

    return 0;
}
           

解釋:

1)這道題有可能筆試題中會遇到。看buf的記憶體能否申請成功。

2)main()中調用了alloc_fun(),指針變量也是變量,隻是這個變量的内容有些特殊而已。調用時,實參變量buf的值傳遞給形參p_param,是以p_param的值也被設定成了NULL。

3)在alloc_fun()函數中,申請的記憶體空間賦給了p_param。但是p_param和buf是兩個獨立的變量。是以這并不影響buf的值。

4)buf的值依舊是NULL,沒有空間,對其進行操作,将會出錯。

5)還有一個問題,p_param是局部變量,函數執行結束後就會釋放,但是其指向的記憶體并沒有釋放。

繼續閱讀