将指针传递给函数?

时间:2014-11-08 16:47:26

标签: c++ pointers

#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引用?

2 个答案:

答案 0 :(得分: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 );

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

答案 1 :(得分: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 );

如果要交换分离指针和指针指向的对象,则需要定义两个重载函数或一个模板函数,如标准C ++函数std::swap