swap(&a,&b)和swap(a,b)在以下题目中有什么区别?

#include<iostream>
using namespace std;
void swap(int *a,int *b)
{
int *temp;
temp=a;
a=b;
b=temp;
}
void main()
{
int a,b;
cin>>a>>b;
swap(a,b);
cout<<a<<" "<<b<<endl;
}

一楼说的不对

你的程序我试过了 在这里
cin>>a>>b;
swap(a,b); 这个是对的 swap(&a,&b) 是错的

因为
void swap(int *a,int *b)
是指针 所以需要传值

而传地址的话 相当于 *a *b 指向地址 然后把*a *b 指向的地址值交换了一下

所以后面输出 数值不变

当传地址时 结果如下

3 4
0012FF7C 0012FF78
3 4
Press any key to continue

#include<iostream>
using namespace std;
void swap(int *a,int *b)
{
int *temp;
cout<<a<<" "<<b<<endl;
temp=a;
a=b;
b=temp;
}
void main()
{
int a,b;
cin>>a>>b;
swap(&a,&b);
cout<<a<<" "<<b<<endl;
}

有疑问请追问 满意记得采纳

在传地址时 是调用的你写的swap

在传值时 是调用的系统的 inline 函数 swap

传值时你把你写的swap 注释掉也不影响

传值时单步调试时不进你写的swap
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-21
swap(a,b)是将ab的值传递,而swap(&a,&b)是传递的地址
第2个回答  2011-09-21
1,首先你的swap函数是写错了的!!!变量前面都要加*才能达到交换的目地。

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

2,因为swap的参数是(int*a, int*b),所以传参时要传地址,即swap(&a, &b); &a即取a变量的地址。
swap(a,b)是错误的,编译不通过!追问

可以通过啊,swap(a,b);可以输出交换后的知,但swap(&a, &b)这输出后没变化???
不信你试试.

追答

hello.c: 在函数‘main’中:
hello.c:15: 警告:传递‘swap’的第 1 个参数时将整数赋给指针,未作类型转换
hello.c:4: 附注:需要类型‘int *’,但实参的类型为‘int’

hello.c: 在函数‘main’中:
hello.c:15: 警告:传递‘swap’的第 1 个参数时将整数赋给指针,未作类型转换
hello.c:4: 附注:需要类型‘int *’,但实参的类型为‘int’

来自:求助得到的回答
第2个回答  2011-09-21
你程序有问题。我帮你改了:
#include<iostream>
using namespace std;
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;

}
void main()
{
int a,b;
cin>>a>>b;
swap(&a,&b);
cout<<a<<" "<<b<<endl;
}

由于你定义swap函数的时候里面的参数是指针型,所以你在传实参的时候要用变量的地址&a,&b