当前位置:   article > 正文

通过指针交换两个变量的值_用指针交换ab的值

用指针交换ab的值

(1)错误示例1

a,b的值不会改变,因为在子函数Swap中a和b的数值进行了交换,但是子函数数据中的改变不会影响到父函数

  1. void Swap_error1(int a,int b)
  2. {
  3. int tmp=a;
  4. a=b;
  5. b=tmp;
  6. }
  7. int main()
  8. {
  9. int a=10;
  10. int b=20;
  11. Swap_error1(a,b);
  12. printf("%d,%d\n",a,b);
  13. return 0;
  14. }

(2)错误示例2

尽管使用了指针,a,b的值依旧不会改变。因为这里仅仅是在Swap函数中交换了指针p1和p2所表示的地址,而a的地址还是原来的地址,所存储的值也还是10,b也是同样的。

  1. void Swap_error2(int *p1,int *p2)
  2. {
  3. int *tmp=p1;
  4. p1=p2;
  5. p2=tmp;
  6. }
  7. int main()
  8. {
  9. int a=10;
  10. int b=20;
  11. Swap_error2(&a,&b);
  12. printf("%d,%d\n",a,b);
  13. return 0;
  14. }

(3)错误示例3

程序运行会出现警告,存在无法访问的指针

  1. void Swap_error3(int *p1,int *p2)
  2. {
  3. int *tmp;
  4. *tmp=*p1;
  5. *p1=*p2;
  6. *p2=*tmp;
  7. }
  8. int main()
  9. {
  10. int a=10;
  11. int b=20;
  12. Swap_error3(&a,&b);
  13. printf("%d,%d\n",a,b);
  14. return 0;
  15. }

(4)Swap函数

通过指针交换a,b的地址,设置一个中间量tmp,先将p1所存储的值赋予tmp;p2的值赋予p1;tmp的值赋予p2;使得子函数中数据变动影响到父函数

  1. void Swap(int *p1,int *p2)
  2. {
  3. int tmp;
  4. tmp=*p1;//tmp=a;
  5. *p1=*p2;//a=b;
  6. *p2=tmp;
  7. }

(5)main()函数

  1. int main()
  2. {
  3. int a=10;
  4. int b=20;
  5. Swap(&a,&b);
  6. printf("%d,%d\n",&a,&b);
  7. return 0;
  8. }

(6)运行结果

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码艺术家/article/detail/63019
推荐阅读
相关标签
  

闽ICP备14008679号