问题描述
- 为啥不能实现数字交换
-
#include
void swap(int a,int b);
int main()
{
int x=8,y=10;
int t=0;
cout<<"x="<<x<<" y="<<y<<endl;
swap(x,y);
cout<<"x="<<x<<" y="<<y<<endl;
cout<<"t in main is :"<<t<<endl;
return 0;
}
void swap(int a,int b)
{
int t;
t=a;
a=b;
b=t;
cout<<"t in swap is: "<<t<<endl;
}x=8 y=10 输出main函数中xy原值
t in swap is: 8 调用swap函数并输出swap中的t的值
x=8 y=10 输出调用函数后的xy值
t in main is :0 输出main函数的t的值
Press any key to continue
解决方案
void swap(int& a,int& b)
解决方案二:
可以看一下C++的传值和传引用。
解决方案三:
总结一下,给你两个不需要定义临时变量的开脑洞的做法,哈哈
#include "iostream"
using namespace std;
//引用交换法
void _refswap(int &a,int &b);
//指针交换法
void _pointswap(int *a,int *b);
int main()
{
int x=8,y=10;
cout<<"x="<<x<<" y="<<y<<endl;
_refswap(x,y);
cout<<"交换:x="<<x<<" y="<<y<<endl;
_pointswap(&x,&y);
cout<<"换回来:x="<<x<<" y="<<y<<endl;
return 0;
}
void _refswap(int &a,int &b)
{
a=a^b;
b=a^b;
a=a^b;
}
void _pointswap(int *a,int *b)
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
解决方案四:
说明一下为什么你原先的做法不能交换呢,因为函数传递的是值,而不是变量本身,当你调用swap(x,y)的时候,实际上,复制了一个x的值和一个y的值,将swap函数放回到main里面就相当于:
int main()
{
int x=8,y=10;
int t=0;
cout<<"x="<<x<<" y="<<y<<endl;
//swap(x,y);
//注意下面这块相当于是swap放回到main里面的代码
int x_temp=x;
int y_temp=y;
int t;
t=x_temp;
x_temp=y_temp;
y_temp=t;
cout<<"t in swap is: "<<t<<endl;
//到这里结束
cout<<"x="<<x<<" y="<<y<<endl;
cout<<"t in main is :"<<t<<endl;
return 0;
}
可以看出为什么不能进行交换了吧?因为你交换的根本就不是原先的x和y哦
解决方案五:
不好意思,写错了,修改如下:
void swap(int *a,int *b)
{
int t=*a;
*a=*b;
*b=t;
cout<<"t in swap is: "<<t<<endl;
}
& 是取地址;
- 才是指针的取值。
解决方案六:
C 语言 形参与实参 的经典问题。
使用参数传递时,如果想改变实参的值就必须使用指针或者引用。
使用指针的交换函数实现如下:
void swap(int *a,int *b)
{
int t=&a;
&a=&b;
&b=t;
cout<<"t in swap is: "<<t<<endl;
}
时间: 2024-09-11 20:55:36