程序設計與算法(三)第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; }
-
輸入
無
-
輸出
5,3
-
樣例輸入
無
-
樣例輸出
5,3
首先我們觀察交換函數部分:
void swap(
// 在此處補充你的代碼
)
{
int * tmp = a;
a = b;
b = tmp;
}
如果只填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;
}
int * pa = & a;
乍一看,這玩意好像不對啊?哪有這麼寫的?
*pa, *是取pa地址的值;&a, &是取地址
pa = & a; //a的地址賦給指針pa
* pa = a; //a的值賦給指針pa指向的值
* pa = & a; //???wtf???
//其實,實際上要這樣看:
(int *) pa = & a; //這樣纔對。
* pa = a = 3
* pb = b = 5
pa與pb分別是a,b的地址值,不信?你編譯試試?
我編譯的:
pa = 0x70fdfc
*pa = 3
pb = 0x70fdf8
*pb = 5
所以,我們的交換函數要使用指針。
再看主函數的swap(pa, pb)
所以有
void swap(
int *(&a),int *(&b)
)
{
int * tmp = a;
a = b;
b = tmp;
}
提交通過,記得下載通過碼。