1
#include <iostream>

void swap(int &pi, int &pj){

    std::cout << "In function swap: " <<  &pi << " " << &pj << "\n";

        int temp = pi;
        pi = pj;
        pj = temp;
}

int main(){

        int i = 10, j = 20;
        int *pi = &i, *pj = &j;
        swap(pi, pj);

        std::cout << *pi << " " << *pj;
        return 0;
}

上面的程序没有给出任何编译错误。(虽然交换函数不是 POINTER TO REFERENCE 类型)并给出正确的输出。但无论我试图在“交换”功能中打印什么,都不会打印到控制台。谁能解释我为什么?

4

3 回答 3

9

看起来您可能正在使用std::swap交换两个指针而不是调用自己的交换例程。我怀疑你有一个using namespace std;地方你没有向我们展示?尝试将交换例程的名称更改为 eg my_swap,然后查看调用是否my_swap有效(它应该会因编译错误而失败)。

于 2012-07-30T13:35:24.600 回答
0

如果你能编译你的程序,你就不会向我们展示你所有的代码。您发布的此代码片段无法编译,因为您试图将 int* 类型的对象传递给您的函数 swapm,该函数需要对 int 的引用。

如果您的代码编译,我怀疑您包含一个“使用命名空间标准;” 原始代码中的任何位置。

于 2012-07-30T13:47:20.680 回答
-1

您正在尝试获取通过引用传递的指针的地址...我认为您不太了解自己在做什么。C++ 中的按引用传递功能允许您传递引用,因此您不需要指针。您的代码应如下所示。

#include <iostream>

void swap(int &i, int &j){

    std::cout << "In function swap: " <<  i << " " << j << "\n";

        int temp = i;
        i = j;
        j = temp;
}

int main(){

        int i = 10, j = 20;
        swap(i, j);

        std::cout << i << " " << j;
        return 0;
}
于 2012-07-30T13:37:35.117 回答