day3_25 关于值传递和指针传递

关于值传递和指针传递

 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 }

运行结果:

day3_25 关于值传递和指针传递

可以发现第一个交换函数,并未交换变量a,b的值,而第二个交换函数交换了a,b的值,只是因为在函数运行到Swap1函数时,把实参b,a 的值依次传给形参y,x,在函数Swap1内形参x,y的值虽然交换了,但是并不能影响实参啊a,b的值.

而在交换函数Swap2中,是将吧b,a的地址传递给了形参 y,  x, 此时*x,*y就是指向的实参a,b,对*x,*y的赋值操作,就是对指针x,y所指向的a,b进行间接操作,所以可以影响到实参a, b.

总结: 在写代码或检查代码时要注意向形参传递的是地址还是数值.两者产生的结果完全不同.

 

上一篇:web3j和spark的okhttp3包冲突问题解决


下一篇:Python机器学习(python简介篇)