问题描述
- 关于c++参数传递的传值调用的问题
-
我看书本上还有网上一些博客都说传值方式不会改变实参的值,但是我在调试下面这段代码时得出的结果是“x:20 y:10",这跟书本说的不一样,能解释一下吗?(我用的是dev cpp 5.6.3)
代码:
int main()
{
int x=10,y=20;
swap(x,y);
cout<<"x:"<<x<<" "<<"y:"<<y;
return 0;
}
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;}
解决方案
http://codepad.org/RG6qPfAY
x:10 y:20
没有问题。
#include<iostream>
using namespace std;
void swap(int x,int y);
int main()
{
int x=10,y=20;
swap(x,y);
cout<<"x:"<<x<<" "<<"y:"<<y;
return 0;
}
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
仔细看和你的程序有什么不同?
看到没有,你缺少了函数的声明,C要求先声明后使用。
你肯定要问没有声明,我的代码怎么还能编译?对,因为系统库中也有一个swap函数。你调用的根本不是你写的。
系统的swap当然可以交换了。
解决方案二:
你把swap放到main函数下方,main中用的不是你自己的swap,应该是环境中的swap,你可以去掉你自己的swap试试,应该不会报错。
你在main中声明一下就调用你自己的了
void swap(int x,int y);
int x=10,y=20;
解决方案三:
因为系统函数也有swap,而你的函数写在了主函数的下面,掩盖了这个问题。所以颠倒下
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
int main()
{
int x=10,y=20;
swap(x,y);
cout<<"x:"<<x<<" "<<"y:"<<y;
return 0;
}
就可以了
结论:传值方式不会改变实参的值,这是对的。
希望采纳我的答案哦,捂脸~~
解决方案四:
调用了系统的函数swap,系统里面已经做了优化处理
解决方案五:
你调用了系统的swap函数,传的是引用而非值,因此你传入的x,y发生了改变!
若要不变,得自己写个swap函数即可
时间: 2024-08-03 13:29:41