交换两个数的四种方法

一.建立临时变量

       1.普通的方法:

思路简介:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换。

 缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数栈帧被释放,原本的值并没有交换。

int change(int x,int y){

    int z=x; //通过建立z这个临时变量来交换

    x=y;

    y=z;

  printf("%d %d",x,y);

return 0;

}


2.指针的方法:

思路简介:取两个数的地址,在swap方法中再用指针指向地址交换,这时候为数值交换(函数调用结束后原空间的值也得到了交换)。

int change(int *x,int *y)//主函数中把两个数的地址传过来

{

int tmp = *x;//定义中间变量 然后交换两个数

*x = *y;

*y = tmp;

printf("%d %d",*x,*y);

}

二.不建立临时变量

        1.加减交换:

                  思路简介:取两个数的和,然后通过减去另外一个数来得到这个数。

                  方法缺陷:两个数的和可能会越界。(数值小的时候可以用)。同样的这是一种假交换,函数调用结束后原本的值并没有真正的交换

int change(int a,int b) { printf("%d %d",a+b-a,a+b-b); return 0; }

2.异或方法:

                      思路简介:通过二进制异或方法交换,如a=3二进制为11,b=2的二进制为10,按位异或(两个值相同为0,否则为1)

a=a^b,                异或后a=11^10=01

b=a^b,                异或后b=01^10=11(此时b为开始a的值)

a=a^b                异或后a=01^11=10(此时a为开始b的值)

这样子a与b就实现了交换

int change(int *a, int *b)

{ *a = *a^*b;

  *b = *a^*b;

  *a = *a^*b;

  printf("%d %d", *a, *b);

  return 0;

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,916评论 0 2
  • 第1章 第一个C程序第2章 C语言基础第3章 变量和数据类型第4章 顺序结构程序设计第5章 条件结构程序设计第6章...
    小狮子365阅读 10,838评论 3 71
  • 1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧...
    金巴多阅读 1,955评论 0 9
  • 感情遇到敌人 可是找不到在哪 就算来自地狱 我也死磕到底 我不怕,也不恨 反而 我还尊重它 有一天 我还要原谅它。
    烟雨RR阅读 162评论 0 0
  • 01 白楹与白夜所来自的辽国,是位于九州北方地区的四个国家之一,与大部分的国家不同,辽国没有下辖的附属村落,只有名...
    走不动游星阅读 737评论 0 4

友情链接更多精彩内容