形參與實參
今天我們來說下c語言形參與實參的區別,形參跟實參理解的話也很簡單,但是好多同學關於這個知識點都是一知半解,沒有真正的去透徹,一問都知道,但在真正引用的時候還會出現很多問題,而百度的時候又會說看不懂,所以我們今天來做一個比較全面的介紹
我們今天講解以簡單明了易看懂為基礎
1.形參和實參是什么
簡單來說,形式參數(形參)就是形式上的參數,沒有確定值,
而實際參數(實參)是實際存在的,已經確定的參數,常量,變量,表達式,都是實參,
最簡單的例子
1 int a=2; 這里的A有了實際的值 為實參 2 int change(int b,int c); **c和b就是形參**。 這里的c和b可以是任意一個值傳遞,為形參 3 int main() 4 { 5 change(1,2); 這樣就是把實參值傳遞給形參,1和2就是實參 6 7 }
這樣我們能有一個簡單的認識
2.形參和實參的區別
形參 |
實參 |
形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數后則不能再使用該形參變量 | 實參定義后就會分配內存 |
形參出現在函數定義中,在整個函數體內都可以使用, 離開該函數則不能使用 | 實參出現在主調函數中,進入被調函數后,實參變量也不能使用 |
形參沒有確定的值 | 實參在值傳遞給形參的時候,必須要有確定的數值 |
3.形參與實參知識點
3.1實參的值不隨形參的變化而變化
在C語言中,數據傳送是單向的,即只能把實參的值值傳遞給形參,但形參的變化不會改變實參的值,我們可以簡單理解,就相當於把實參的值 復制給了另一個數(形參),而另一個數的改變不會改變原來數(實參)的值,正規來說:他們在內存中位於不同的位置,形參將實參的內容復制一份,在該函數運行結束的時候形參被釋放,而實參內容不會改變。。
** 3.2.實參傳遞給形參的參數個數類型和順序都應相同,否則會系統強制轉換,出現數據丟失或者“類型不匹配”的錯誤
比如
loat a=5.34; void number(int b); int main() { number(a); //這樣就會出現丟精度現象 }
3.3如果實參是數組名,那么形參傳遞的之就是地址的值
int a[5]; void add(int *b); int main() { add(a);//這樣就是把數組a的首地址做為形參傳遞 }
在C里面 是無法做到形參改變 實參值同步改變的。如果要用函數改變實參的值,可以用指針作為參數來改變
通過直接改變地址存儲值來改變實參