C语言实现两个数交换

引言

从一开始我们学习c语言就知道直接传两个变量的值到一个函数里面去,在函数里面去交换这两个数是不可以的;
这样的操作就好比在一张复印品上面写写画画,最后在原稿上什么改变都没有;
例如:

void swap(int a, int b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}

int main()
{
	int a, b;
	a = 4;
	b = 5;
	swap(a, b);
	printf("a = %d b = %d\n", a, b);
}

对于初学者这样的函数太多太多了;
后来我们改成了下面这样就可以了,知道了要传地址进去;

void swap(int *a, int *b)
{
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}

int main()
{
	int a, b;
	a = 4;
	b = 5;
	swap(&a, &b);
	printf("a = %d b = %d\n", a, b);
}

至于为什么这样可以我们本文不做讲解,这牵扯到汇编的知识;

问题

现在我不想让这个函数仅仅用来交换两个整形数,我想让这个函数可以做更多的事情,比如交换浮点数,交换long型;怎么办?

实现

通过上面交换两个整形数时的思路我们可以看出我们将两个地址传进了函数,函数内部交换了两个地址上的东西;那现在我也可以传进两个地址,并且穿进去一个size之间交换两个地址上的内容;

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void swap(void *a, void *b, int size)
{
	void *temp = malloc(size);
	memcpy(temp, a, size);
	memcpy(a, b, size);
	memcpy(b, temp, size);
}

int main()
{
	int a, b;
	a = 5;
	b = 4;
	printf("%d %d\n", a, b);

	swap(&a, &b, sizeof(int));
	printf("%d %d\n", a, b);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值