std :: cout没有打印到控制台

时间:2012-07-30 13:32:13

标签: c++ pointers pass-by-reference

#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类型中交换功能)并给出正确的输出。 但无论我想在&#34; swap&#34;功能未打印到控制台。 谁能解释我为什么?

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:0)

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

如果您的代码编译,我怀疑您要包含'using namespace std;'原始代码中的任何地方。

答案 2 :(得分:-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;
}