程序设计与算法(三)第01周测验002:难一点的swap
【摘要】
程序设计与算法(三)第01周测验002:难一点的swap
本文是中国大学MOOC,北京大学程序设计与算法(三)C++面向对象程序设计第一周测验。
总时间限制: 1000ms 内存限制: 65536...
程序设计与算法(三)第01周测验002:难一点的swap
本文是中国大学MOOC,北京大学程序设计与算法(三)C++面向对象程序设计第一周测验。
-
总时间限制:
1000ms
-
内存限制:
65536kB
-
描述
填空,使得程序输出结果是:5,3
#include <iostream> 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; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
-
输入
无
-
输出
5,3
-
样例输入
无
-
样例输出
5,3
首先我们观察交换函数部分:
void swap(
// 在此处补充你的代码
)
{
int * tmp = a;
a = b;
b = tmp;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
如果只填int *a, int *b
是不能完成交换的
再留意主函数:
int main()
{
int a = 3,b = 5;
int * pa = & a;
int * pb = & b;
swap(pa,pb);
cout << *pa << "," << * pb;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
int * pa = & a;
乍一看,这玩意好像不对啊?哪有这么写的?
*pa, *是取pa地址的值;&a, &是取地址
pa = & a; //a的地址赋给指针pa
* pa = a; //a的值赋给指针pa指向的值
* pa = & a; //???wtf???
//其实,实际上要这样看:
(int *) pa = & a; //这样才对。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
* pa = a = 3
* pb = b = 5
pa与pb分别是a,b的地址值,不信?你编译试试?
- 1
- 2
- 3
我编译的:
pa = 0x70fdfc
*pa = 3
pb = 0x70fdf8
*pb = 5
- 1
- 2
- 3
- 4
所以,我们的交换函数要使用指针。
再看主函数的swap(pa, pb)
所以有
void swap(
int *(&a),int *(&b)
)
{
int * tmp = a;
a = b;
b = tmp;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
提交通过,记得下载通过码。
文章来源: blog.csdn.net,作者:沧夜2021,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/CANGYE0504/article/details/104704796
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)