c++排序调用函数

来源:百度知道 编辑:UC知道 时间:2024/05/16 17:20:09
#include<iostream.h>
#include<stdio.h>
#include<string>

int main()
{ void swap(int a,int b);
int a,b,c,x;
cin>>a>>b>>c;
while(a>b||b>c)
{if(a>b) swap(a,b);
// {x=b;b=a;a=x;}
if(b>c) swap(b,c);
// {x=c;c=b;b=x;}
}

cout<<b<<endl;
// cout<<a<<" "<<b<<" "<<c<<endl;
return 0;

}
void swap(int a,int b)
{
int x;
x=a;a=b;b=x;
}

去掉函数,改用注释的语句。答案是正确的,为什么调用函数就错了。

这个函数编写得有问题,交换的只是那个函数作用域里面的数,根本没有交换原来的值。

改成如下即可:

void swap(int & a , int & b)
{
int x;
x = a;
a = b;
b = x;
}

这里的一个知识点就是值传递和地址传递.你写的是值传递的函数,即你的swap函数对于主函数main中的数值不会引起任何影响,把倒数第四行的void swap(int a,int b)改写成void swap(int & a , int & b) 用的是引用,改写成void swap(int *a,int *b) 是用指针,两个都可以达到效果.