關於值傳遞和地址傳遞函數
所謂值傳遞就是指在調用函數時將實際參數複製一份傳遞到函數中,這樣在函數中若是對參數進行修改,將不會影響到實際參數.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