#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;功能未打印到控制台。 谁能解释我为什么?
答案 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;
}