延伸概念
傳值呼叫(call by value):
在程式呼叫之處,將實際引數的值copy給函數裡的形式參數,在函數裡作運算或改變,並不會影響
呼叫位置的引數。
傳址呼叫(call by address)/傳參呼叫(call by reference):
將程式呼叫之實際引數的位址,傳遞給函數中對應的變數或指標,所以在被呼叫之函數裡,去修改參數時,將會改變
所呼叫引數的值。
C語言以「指標」實作傳址呼叫的媒介。
set1(int x, int y) /* 傳值 */
{
x = 4;
y = 5;
}
set2(int *x, int *y) /* 傳址 */
{
*x = 6;
*y = 7;
}
main()
{
int x =2, y=3; // 變數宣告
printf(" 初值 X=%d Y=%d\n", x, y);
set1(x, y); // 呼叫傳值函數(交換X Y)
printf(" set1傳值 X=%d Y=%d\n",x,y);
set2(&x, &y); // 呼叫傳址函數(交換X Y)
printf(" set2傳址 X=%d Y=%d\n",x,y);
}
請問執行的結果是什麼呢?
照理說,執行set1後,x,y的值應該被改成4,5,但結果仍是2,3
表示主程式main裡的x,y沒有被修改。
但執行set2後,可發現x,y值被改成6,7
也就是傳址呼叫後,被呼叫的函數裡修改變數的話,
也會異動到主程式main的x,y數值。
|