首页 > 其他 > 详细

如何用函数实现两个数之间的交换

时间:2018-04-13 19:34:27      阅读:249      评论:0      收藏:0      [点我收藏+]

这段程序的两个值并没有交换,但初学者很容易认为是交换了。

void  exchange(int ,int);

void exchange(int ,int){


  int tmp;

  tmp = one;

  one = another;

  another  = tmp;

}

int main(){

int num1;

int num2;

exchange(num1,num2);

printf(“交换后 : %d %d”,num1,num2);

return 0;

}

 

    从main()函数开始,4字节整型变量num1先进入“堆栈系统”中申请4字节的空间,然后4字节整型变量num2也申请了4字节的空间在num1的上面。

    操作系统为了保护主函数的信息,申请了4字节的空间用来保护主函数的现场信息。

    当调用exchange()函数时,从左往右,先进入4字节整型形参another,栈顶指针往上移4个字节,然后,4字节整型形参one进入栈中,最后局部变

    量tmp进入栈指针向上移4字节。将one所指向空间的值,赋值给tmp,再将another所指向空间的值,赋值给one所指向空间,最后将tmp的值赋值another

    所指向的空间,但是,num1与num2的值根本没有改变!!!

 下面代码才是真正实现两个值的交换的代码:

   realExchange(&num1,&num2);

   void realExchange(int * one,int *another){

     int tmp;

     tmp = *one;

    *one = *another;

    *another  = tmp;

}

 int  main(){

   int num1;

  int num2;

  scanf("%d %d",&num1,&num2);

  exchange(&num1,&num2);

  printf(“交换后: %d %d”,num1,num2);

  return 0;

}

  以上这段代码才是真正的交换num1和num2的值!!!

     从main()函数开始,4字节整型变量num1先进入“堆栈系统”中申请4字节的空间,然后4字节整型变量num2也申请了4字节的空间在num1的上面。

     操作系统为了保护主函数的信息,申请了4字节的空间用来保护主函数的现场信息。

     进入realexchange()函数时,将one所指向的空间(num1)的值,赋給tmp空间,再将another所指向空间(num2)的值,赋值給one所指向的

  空间(num1),最后将tmp的值赋值给another所指向的空间(num2),此时,num1的值才与num2的值交换了!

 

如何用函数实现两个数之间的交换

原文:https://www.cnblogs.com/youdiaodaxue16/p/8822676.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!