1. 程式人生 > >C函式的實參與形參的輸出區別

C函式的實參與形參的輸出區別

#include <stdio.h>

int swap(int a,int b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;
    printf("in the swap,a=%d,b=%d\n",a,b);
}

int main()
{
    int a=2;
    int b=5;
    printf("a=%d,b=%d\n",a,b);
    swap(a,b);
    printf("after swap,a=%d,b=%d\n",a,b);
    return 0;   
}

將上述程式執行可以得到結果:
a=2,b=5
in the swap,a=5,b=2
after swap,a=2,b=5
由程式結果我們可以看出,swap函式完成的功能是將傳入的2個形參值進行對調,但是在主函式中,實參a為2,b為5,在進行swap函式後的實參輸出結果依舊為a=2,b=5,但是在swap函式中的輸出確實將形參a,b的值進行了對調。
由此可以得出一個結論,函式的形參只在呼叫時才分配空間,函式在main函式裡執行完畢後,形參分配的記憶體空間就被釋放掉了


但是,如果我們就是想要完成將2個實參a,b的值進行對調怎麼辦呢,這裡就要用到指標了,程式如下:

#include <stdio.h>

int swap(int *a1,int *b1)
{
    int temp;
    temp=*a1;
    *a1=*b1;
    *b1=temp;
    printf("in the swap,a=%d,b=%d\n",*a1,*b1);
}

int main()
{
    int a=2;
    int b=5;
    printf("a=%d,b=%d\n",a,b);
    swap(&a,&b);
    printf
("after swap,a=%d,b=%d\n",a,b); return 0; }

將上述程式進行編譯執行,得到的輸出結果為:
a=2,b=5
in the swap,a=5,b=2;
after swap,a=5,b=2;
該函式就完成了將實參進行對調的功能。