程序設計與算法(三)第01周測驗002:難一點的swap

程序設計與算法(三)第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;
}

提交通過,記得下載通過碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章