1. 程式人生 > 實用技巧 >HOJ 2058 The sum problem

HOJ 2058 The sum problem

形參和實參的區別

形參出現在函式定義中,在整個函式體內都可以使用,離開該函式則不能使用。

實參出現在主調函式中,進入被調函式後,實參變數也不能使用。

形參和實參的功能是作資料傳送。發生函式呼叫時,主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。

1.形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只有在函式內部有效。函式呼叫結束返回

主調函式後則不能再使用該形參變數。

2.實參可以是常量、變數、表示式、函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值,以便把這些值傳送給形

參。因此應預先用賦值,輸入等辦法使實參獲得確定值。

3.實參和形參在數量上,型別上,順序上應嚴格一致,否則會發生“型別不匹配”的錯誤。

4.函式呼叫中發生的資料傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此在函式呼叫過程中,形參的值

發生改變,而實參中的值不會變化。

5.當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製一份,在該

函式執行結束的時候形參被釋放,而實參內容不會改變。

而如果函式的引數是指標型別變數,在呼叫該函式的過程中,傳給函式的是實參的地址,在函式體內部使用的也是實參的地址,即使用的就是實參

本身。所以在函式體內部可以改變實參的值。

上面一段話解釋了為什麼下面一段程式中函式可以改變主函式的值

#include<stdio.h>
#include<stdlib.h>
void swap(int *p1, int *p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    int *point1 = &a, *point2 = &b;
    swap(point1, point2);
    printf(
"%d%d", a, b); return 0; }