赞
踩
注意进行交换的时候不能直接使用变量进行交换。例如使用a,b进行交换。再主函数中的a,b与viod函数中的a,b不是一个数,它们的地址是不同的交换交换之后等于使用了a,b的地址。
- void Swap_err1(int a, int b)//error,交换这里的a,b不影响主函数中的a,b。
- {
- int tmp = a;
- a = b;
- b = tmp;
- }
-
-
- void Swap_err2(int* p1, int* p2)//error,没有解引用,只是将p1和p2的地址进行了交换。
- {
- int* tmp;
- tmp = p1;
- p1 = p2;
- p2 = tmp;
- }
-
-
- //野指针,定义的时候,没有进行初始化。所以tmp是一个随机数,我们没有权限去使用这个tmp的地址。
- void Swap_err3(int* p1, int* p2)
- {
- int* tmp;
- *tmp = *p1;//崩溃,使用了野指针,系统没有权限去使用,所以代码执行过程中崩溃
- *p1 = *p2;
- *p2 = *tmp;
- }

正确的做法。
- void Swap(int* p1, int* p2)//正确的使用,定义了两个指针,因为数据的地址是固定不变的,我们使用指针就能完美解决这个问题,通过地址去进行交换,避免了数据
- {
- int tmp = *p1;
- *p1 = *p2;
- *p2 =tmp;
- }
-
-
- int main()
- {
- int a = 10;
- int b = 20;
- Swap(&a,&b);再这里对a,b的地址进行使用,不能直接使用a,b的数值。
- printf("%d %d", a, b);
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。