2014-11-08 258 views
-2
#include <iostream> 

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

int main() { 
    int alpha = 5; 
    int beta = 34; 

    swap (alpha,beta); 

    std::cout << alpha << std::endl; 
    std::cout << beta << std::endl; 

    int *ab = new int(); 
    *ab = 34; 
    int *cd = new int(); 
    *cd =64; 

    swap(ab,cd); 

    std::cout << *ab << std::endl; 
    std::cout << *cd << std::endl; 
} 

第一個問題:我如何能夠將值傳遞給指針作爲傳遞參數的函數。將指針傳遞給函數?

第二個問題:它如何交換。它交換指針。但是當它出現時,alpha和beta的值不會保持相同。

第三個問題:爲什麼當我傳遞指針時函數不工作,但當我傳遞常量變量時​​工作。

第四個問題:函數void swap(int *a, int* b)int *aint *b的引用?

+7

你的'使用命名空間std;'搞亂了你。標準交換功能實際上是正確實施的。你的不是。 – chris 2014-11-08 16:48:15

+1

'swap(&alpha,&beta);' – 2014-11-08 16:50:59

+0

@chris實際上,在第一次調用中他意外地使用了'std :: swap',:)。 – 101010 2014-11-08 16:51:39

回答

1

首先你的交換功能是錯誤的。我想你不想交換指針本身,而是指針指向的對象。應當定義爲

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

和它可以被稱爲像

swap (&alpha, &beta); 

swap(ab, cd); 

在這個函數中的參數a和b是指針。如果你想使用的參數引用,則函數將看起來像

void swap(int &a, int &b) 
{ 
    int tmp = a; 
    a = b; 
    b = tmp; 
} 

可以稱得上像

swap (alpha, beta); 

swap(*ab, *cd); 

如果你想separatly交換指針和通過指針指向的對象,則需要定義兩個重載函數或一個模板函數,如標準C++函數std::swap

+0

當我使用int k時它給出了一個編譯錯誤。當我使用int * k時,它沒有問題。 – 2014-11-08 16:55:09

+0

整數不能分配指針。 – rightfold 2014-11-08 16:55:59

+0

@John。 J.亞當斯有一個錯字。查看更新後的帖子。 – 2014-11-08 16:57:50

4

而這將成爲爲什麼我們不應該包括在全球層面空間std最好的例子...

swap (alpha,beta); 

會打電話std::swap,而不是你自己的swap

三問:爲何當我通過指針沒有功能的工作,但是當我通過定期的變量

因爲你swap不正確的文字作品。它應該是:

void swap (int *a, int *b) { 
    // Preferably you should also check if pointers are not NULL. 
    int temp; 
    temp = *a; 
    *a = *b; 
    *b = temp; 
} 

第四問:在功能void swap(int *a, int* b)int *aint *b參考?

的參考語法爲:

void swap (int& a, int& b); 

所以,不,他們不是。他們是指針。