2 weixin 40233500 weixin_40233500 于 2017.09.14 00:08 提问

C++入门 实在想不通 没在论坛找到求大佬帮忙

补充swap的形参
#include
using namespace std;

void swap(
// 在此处补充你的代码
)
{
int * tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 3,b = 5;
int * pa = & a;
int * pb = & b;
swap(pa,pb);
cout << pa << "," << * pb;
return 0;
}
***

3个回答

caozhy
caozhy   Ds   Rxr 2017.09.14 08:32

void swap(int** a, int**b
// 在此处补充你的代码
)

TA_tan
TA_tan   2017.09.14 08:45

#include
using namespace std;

void swap(int *a,int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a = 3,b = 5;
int * pa = & a;
int * pb = & b;
swap(pa,pb);
cout << "a:"<<a << "," << "b:"<<b;
return 0;
}
输出:
a:5,b:3

楼主是想通过函数交换a和b的值吗?
首先,你应该知道的是传入函数中的是一个副本。也就是说我们为了改变a本身,传入了a指针的副本,通过指针找到a存在的地方,真正的改变a的数值。

或许下面这个简单的例子更好理解一些。

#include
using namespace std;

void setValue(int a)
{
a = 10;
}

void setValuebyPoint(int *a)
{
*a = 9;
}

int main()
{
int a = 8;
cout<<a<<endl;
setValue(a);
cout<<"setValue:"<<a<<endl;
setValuebyPoint(&a);
cout<<"setValuebyPoint:"<<a<<endl;
}
输出:8
setValue:8
setValuebyPoint:9

lei973103605
lei973103605 兄弟,人家 让你写形参,并不是要你改变函数体!
2 个月之前 回复
lei973103605
lei973103605   2017.09.14 09:45

这道题主要是考察C++中的 引用这个知识点的应用。
正确答案应该是:
void swap(int &a, int &b)// 在此处补充你的代码
{
int * tmp = a;
a = b;
b = tmp;
}

TA_tan
TA_tan 如果考察引用的话,在main里面就不应该传入指针啊!!!还有swap函数中,int *tmp 是指针类型,a还是个int类型,怎么可以赋值?
2 个月之前 回复
TA_tan
TA_tan 兄弟,楼主可能自己都不知道考什么知识点。
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片