关于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函数即可