为什么多了个声明语句结果就完全不一样?(C++)

来源:百度知道 编辑:UC知道 时间:2024/04/29 22:31:16
第三行的声明语句去掉之后X,Y交换,加上声明语句X,Y交换不了。为什么~!!
知道的请回答一下,谢谢~!

源码如下:
#include<iostream>
using namespace std;
void swap(int a,int b);
void main(){
int x=1,y=2;
swap(x,y);
cout<<x<<y<<endl;

}

void swap(int a,int b)
{
//if(a<b)
//{
int temp;
temp=a;a=b;b=temp;
//}
}
但是改成这样,也就是吧第三行的声明去掉。交换成功,?WHY
#include<iostream>
using namespace std;
//void swap(int a,int b);
void main(){
int x=1,y=2;
swap(x,y);
cout<<x<<y<<endl;

}

void swap(int a,int b)
{
//if(a<b)
//{
int temp;
temp=a;a=b;b=temp;
//}
}

我来告诉你吧,
因为swap本身就是一个系统函数,你加了声明,那么main会调用你写的函数,但是如果你不加声明,那么main会调用系统的那个函数,碰巧的是你们两个函数的功能是一样的.

#include<iostream>
using namespace std;
void swap(int &a,int &b);
void main()
{
int x=1,y=2;
swap(x,y);
cout<<x<<y<<endl;
}

void swap(int &a,int &b)
{
if(a<b)
{
int temp;
temp=a;
a=b;
b=temp;
}
}

因为你的按值传递!!应该改为按地址传递!!!就像上面那位朋友那样定义!!!定义为引用!!!