先来看
交换两个变量的值,容易联想到‘’两量交换借助中间变量‘’的方法。
若用函数调用的方式来实现交换,沿用上述思路初步实现如下:
#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