c语言-交换两个整数
使用c来写一个函数来实现交换两个整数。
第一种
一般的方法,引用中间变量,方便快捷。
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
第二种
void swap(int *a, int *b)
{
int tmp = *a + *b;
*b = tmp - *b;
*a = tmp - *b;
}
tmp虽然可能会溢出,但是依然能够达到交换的效果。
上面的都是引用了中间变量,再看看不使用中间变量的方法。
不使用中间变量虽好,但是如果a,b的值一样,说明交换的是同一个变量,执行之后的操作就会出现问题。
第三种
void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
第四种
void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a - *b;
*b = *a + *b;
*a = *a - *b;
}
第五种
void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
一般来说使用位操作比加减运算要快
第六种
void swap(int *a, int *b)
{
if(a == b){
return;
}
*a = *a * *b;
*b = *a / *b;
*a = *a / *b;
}
这种方法虽然很搓,但也是一种方法。。。
第七种
void swap(void *a, void *b, int length)
{
void *tmp = malloc(length);
if(tmp == NULL){
fprintf(stderr, "the memory is full \n");
exit();
}
memcpy(tmp, a, length);
memcpy(a, tmp, length);
memcpy(b, a, length);
free(tmp);
tmp = NULL;
}
第七种是一种通用的写法,可以用于任何类型的变量的交换。前提,这两个变量所占空间一样
c语言-交换两个整数的更多相关文章
- 黑马程序员-- C语言交换两个整数变量值几种函数比较
总结了C语言中几种交换两个整数数值的函数,欢迎交流 #include <stdio.h> 使用多种交换变量值的函数比较 方法一:使用第三方临时变量 这种函数a,b只是值传递,实质上不能修交 ...
- 面试题:如何在不使用临时变量temp的情况下交换两个整数的值?
利用一个小技巧,一个整数a在异或另一个整数b两次以后所得的值还是整数a. 具体的过程我们可以自己找两个整数以二进制的形式自己在纸上画一下他们的异或过程.(异或的运算符号为"^") ...
- PTA 面向对象程序设计 6-1 引用作函数形参交换两个整数
引用作函数形参交换两个整数 设计一个void类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作. 裁判测试程序样例: #include <iostream> ...
- 用swap函数交换两个整数
#include<stdio.h> //头文件 main() //主函数 { void swap(int *p,int *q); //声明 int a,b; //定义两个整数 int *p ...
- 用异或运算交换两个整数实现swap函数功能
对于异或运算有这如下说明: 1^1=0 0^0=0 1^0=1 0^1=1 简单理解就是当两个书相同时结果为0,而两个数不同时异或的结果为1 可用于两个整数的交换,而不用去引入一个中间变量 #incl ...
- C语言交换两个数的值
#include<stdio.h> int main() { //交换两个数的值 // 方法一 可读性最好 ; ; int temp ; temp = a; a = b; b = temp ...
- c语言交换两个变量的值
有两个变量a 和b,想要交换它们的值 int a,b; 能不能这样操作呢? b=a; a=b; 不能啊,这样操作的意思是把a的值放到b中,然后b中的值已经被覆盖掉了,已经不是b原来的那个值了,所以是没 ...
- 一个BUG?Visual Studio 2017 C++编写交换两个整数
想用一句话搞定交换: int a = 2, b = 5; cout << "a = " << a << ", b = " & ...
- C语言交换两个指针所指位置的数值
交换指针变量x和y所指向的存储位置处存放的值,不需要第三个位置来存储临时变量.这种方式并没有性能上的优势. void replace(int *x, int *y) { *y = *x ^ *y; * ...
随机推荐
- Cgroups控制cpu,内存,io示例
Cgroups是control groups的缩写,最初由Google工程师提出,后来编进linux内核. Cgroups是实现IaaS虚拟化(kvm.lxc等),PaaS容器沙箱(Docker等)的 ...
- javaScript入门第一天
JavaScript提供七种不同的data types(数据类型),它们是undefined(未定义), null(空), boolean(布尔型), string(字符串), symbol(符号), ...
- uva10106(大数乘法)
public class Product { public static void main(String[] args){ Scanner sc = new Scanner(new Buffered ...
- Android 定位地理坐标体系
参考: 中国特色 火星坐标 iOS 火星坐标相关整理及解决方案汇总 百度地图坐标转换API 地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02)百度坐标系 (BD-09) 的转换算法 火星坐标 ...
- ACM 谁获得了最高奖学金
谁获得了最高奖学金 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: ...
- HDU 4753 Fishhead’s Little Game(DFS)
题目链接 很繁琐的爆搜,最多要加2^12条边,暴力就可以,回溯那部分一直没有回溯好,写了一晚上...代码非常,非常难看..对了,还不是普通的爆搜,双向搜索博弈,以前记得看过,这次好像第一次写.. #i ...
- Makefile学习
makefile中常用的函数: http://linux.chinaunix.net/techdoc/develop/2009/07/09/1122854.shtml SRC = $(wildcard ...
- 深入浅出 - Android系统移植与平台开发(七)- 初识HAL
作者:唐老师,华清远见嵌入式学院讲师. 1. HAL的module与stub HAL(Hardware AbstractLayer)硬件抽象层是Google开发的Android系统里上层应用对底层硬件 ...
- C#常用方法二
public sealed class StringTool { /// <summary> /// 将txt文件读入字符串 /// </summary> /// <pa ...
- poi excel导出,下载
poi.jar包 public void downExcel(HttpServletResponse response,Page<ShopApply> page) throws Excep ...