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

Posted 离愁i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用函数实现两个数之间的交换相关的知识,希望对你有一定的参考价值。

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

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的值交换了!

 

以上是关于如何用函数实现两个数之间的交换的主要内容,如果未能解决你的问题,请参考以下文章

如何用matlab实现两个函数的卷积运算

C语言 两个[不定参函数]之间如何进行 [参数传递]

如何用matlab实现两个函数的卷积运算

如何用excel计算两个日期之间相差的年数和月数

如何用PHP+MySQL计算两个日期之间的月份数和其余下的天数?

matlab中如何用代码表示两个数之间的街区(曼哈顿)距离