c語言中形參與實參的關係

形參和實參的區別
形參出現在函數定義中,在整個函數體內都可以使用, 離開該函數則不能使用。
實參出現在主調函數中,進入被調函數後,實參變量也不能使用。 
形參和實參的功能是作數據傳送。發生函數調用時, 主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送
1.形參變量只有在被調用時才分配內存單元,在調用結束時, 即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。 函數調用結束返回主調函數後則不能再使用該形參變量。 
2.實參可以是常量、變量、表達式、函數等, 無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。 
3.實參和形參在數量上,類型上,順序上應嚴格一致, 否則會發生“類型不匹配”的錯誤。 
4.函數調用中發生的數據傳送是單向的。 即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 因此在函數調用過程中,形參的值發生改變,而實參中的值不會變化。
5.當形參和實參不是指針類型時,在該函數運行時,形參和實參是不同的變量,他們在內存中位於不同的位置,形參將實參的內容複製一份,在該函數運行結束的時候形參被釋放,而實參內容不會改變。
而如果函數的參數是指針類型變量,在調用該函數的過程中,傳給函數的是實參的地址,在函數體內部使用的也是實參的地址,即使用的就是實參本身。所以在函數體內部可以改變實參的值。

以上轉自https://blog.csdn.net/mal327/article/details/6713010;感覺分析的非常透徹,感謝分享。


如這個例子:就是指針作爲形參時,實參*s只是把地址傳遞給了形參*p,至於p指針變量的如何變化與S無關,除非p指針改變了實參所指向位置的內存單元中的數值,那麼訪問實參所得值也會隨之變化。
void func(char *p)
{
    p=p+1;
}
int main()
{
    char s[]={'1','2','3','4'};
    func(s);
    printf("%c",*s);
    return 0;
}

輸出結果爲1

並不是2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章