C语言和C++中几种实现交换变量的值方法

先来看

交换两个变量的值,容易联想到‘’两量交换借助中间变量‘’的方法。

若用函数调用的方式来实现交换,沿用上述思路初步实现如下:


#include<stdio.h>           //include<iostream>                   
#include<stdlib.h>           //using namespace std;
void swap(int m,int n)
{
	int temp;
	temp=m;
	m=n;
	n=temp;
}
int main()
{
	int a=5,b=10;
	printf("需要交换的两个数:");        //cout<<"需要交换两个数:"<<endl
	printf("%d %d\n", a, b);             //cout<<"a="<<a<<" b="<<b<<endl;
	swap(a,b);
	printf("交换之后的两个数:");        //cout<<"交换之后的两个数:"<<endl
	printf("%d %d\n", a, b);             //cout<<"a="<<a<<" b="<<b<<endl;
	return 0;


}

结果如下
在这里插入结果没有实现数值的交换图片描述
有没有感到疑惑呢?
涉及到了函数传递中至关重要的问题—实参和形参之间的关系。
是因为函数的括号里的为形参 而形参只是实参的一份拷贝,所以说在函数里无论你怎么动形参,实参的值都不会因此而改变什么,所以也就无法达到交换两个变量值得效果。

第一种 超级简单的(为了文章完整附上的)

/*第一种C语言最简单不调用函数的*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a=10, b=20, c;
{
c = a;
a = b;
b = c;
}
printf("%d %d\n", a, b);
return 0;
}

结果如下

在这里插入图片描述

第二种
改进方法:利用指针

# include<stdio.h>
void swap(int *m,int *n)
{
	int temp;
	temp=*m;
	*m=*n;
	*n=temp;
}
int main()
{
	int a=5,b=10;
	printf("a=%d,b=%d\n",a,b);
	swap(&a,&b);          //注意带有地址符
	printf("a=%d,b=%d\n",a,b);
	return 0;


}

结果如下:
在这里插入图片描述
现在怎么就实现了呢?
用两个指针变量则能直接获取到两个变量的地址 如果将两个变量的地址交换了,可想而知两个变量的值也就交换了。

第三种
再来看c++实现相同功能:利用指针实现传参

/*第一种c++利用指针*/
# include<iostream>
using namespace std;
void swap(int *m,int *n)
{
	int temp;
	temp=*m;
	*m=*n;
	*n=temp;
}
int main()
{
	int a=5,b=10;
	cout<<"a="<<a<<" b="<<b<<endl;
	swap(&a,&b);
	cout<<"a="<<a<<" b="<<b<<endl;
	return 0;
}

第四种
c++基于C语言扩展:利用引用实现传参

/*第二种c++利用引用*/
# include<iostream>
using namespace std;
void swap(int &m,int &n)
{
	int temp;
	temp=m;
	m=n;
	n=temp;
}
int main()
{
	int a=5,b=10;
	cout<<"a="<<a<<" b="<<b<<endl;
	swap(a,b);
	cout<<"a="<<a<<" b="<<b<<endl;
	return 0;


}

附上结果:
在这里插入图片描述
over

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值