關於值傳遞和地址傳遞

關於值傳遞和地址傳遞函數

所謂值傳遞就是指在調用函數時將實際參數複製一份傳遞到函數中,這樣在函數中若是對參數進行修改,將不會影響到實際參數.spa

而地址傳遞是直接把變量的地址傳遞給函數,這時函數是直接對原來的變量進行操做的.指針

 1 #include<stdio.h>
 2 void Swap1(int x, int y) //值傳遞函數
 3 {
 4     int tmp = x;
 5     x = y;
 6     y = tmp;
 7     return;
 8 }
 9 void Swap2(int* x, int* y) //地址傳遞函數
10 {    
11     int tmp = *x;
12     *x = *y;
13     *y = tmp;
14     return;
15 }
16 int main()
17 {
18     int a = 10;
19     int b = 100;
20     Swap1(a, b);
21     printf("a = %d,b = %d \n", a, b);
22     Swap2(&a, &b);
23     printf("a = %d,b = %d \n", a, b);
24     return 0;
25 }

運行結果:code

能夠發現第一個交換函數,並未交換變量a,b的值,而第二個交換函數交換了a,b的值,只是由於在函數運行到Swap1函數時,把實參b,a 的值依次傳給形參y,x,在函數Swap1內形參x,y的值雖然交換了,可是並不能影響實參啊a,b的值.blog

而在交換函數Swap2中,是將吧b,a的地址傳遞給了形參 y,  x, 此時*x,*y就是指向的實參a,b,對*x,*y的賦值操做,就是對指針x,y所指向的a,b進行間接操做,因此能夠影響到實參a, b.io

總結: 在寫代碼或檢查代碼時要注意向形參傳遞的是地址仍是數值.二者產生的結果徹底不一樣.class

相關文章
相關標籤/搜索