2014-11-08 213 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); 

所以,不,他们不是。他们是指针。