用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是局部變量,函數執行結束後就會釋放,但是其指向的記憶體并沒有釋放。