Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将值传递给C+中的指针参数+;_C++_Pointers_Parameter Passing - Fatal编程技术网

C++ 将值传递给C+中的指针参数+;

C++ 将值传递给C+中的指针参数+;,c++,pointers,parameter-passing,C++,Pointers,Parameter Passing,在下面的代码中,为什么swap函数以两种方式工作,即以swap(x,y)和swap(&x,&y)的形式传递值 intmain(){ int x,y; cout>x>>y; 互换(x,y); 编写swap(x,y); 在您的示例中,即使编写swap(&x,&y);也只会得到编译错误,除非您在main之前声明void swap(int*,int*); 而std::swap对此没有帮助,因为它无法将右值int*转换为int*&(即使它可以这样做,它也不会交换x和y的值) 下面是另一个答案的解释,关于

在下面的代码中,为什么swap函数以两种方式工作,即以swap(x,y)和swap(&x,&y)的形式传递值

intmain(){
int x,y;
cout>x>>y;
互换(x,y);

编写
swap(x,y);


在您的示例中,即使编写
swap(&x,&y);
也只会得到编译错误,除非您在
main
之前声明
void swap(int*,int*);

std::swap
对此没有帮助,因为它无法将右值
int*
转换为
int*&
(即使它可以这样做,它也不会交换
x
y
的值)



下面是另一个答案的解释,关于为什么称为
std::swap

当您
swap(x,y)
时,编译器尝试查找要调用的
swap
重载。假设您使用std::swap;
使用命名空间std;
编写了
,则允许编译器查找的命名空间将是全局的
std

原型
void swap(int,int)
是预期的,但编译器在寻找可行的重载时,对选项是开放的——具有相同名称、相同参数计数但需要强制的不同参数类型的函数也是可以的;在枚举它们之后,它将选择最接近的匹配

您在全局命名空间中实现的是

void swap(int*, int*);
但是,给定的是一个函数模板

namespace std {
    template <typename T>
    void swap(T&, T&);
}

当您调用版本交换(x,y)时,它实际上调用标准库函数模板“模板无效交换(T&a,T&b)”
,在“算法”中声明头文件。

避免使用命名空间std;
语句,您将不会遇到这些陷阱。始终发布您的。您有
使用命名空间std
,但没有在此处显示。忽略包含关键细节会浪费我们的时间!!请在
使用命名空间std
中编辑
#包含
s。您的函数应该被称为::swap(&ax,&y)。::swap(&x,&y)当然……这只是一个没有帮助的真实陈述。要做出一个有用的回答,你应该解释什么是
std::swap
,为什么被称为,以及如何解决问题。@anatolyg这不是OP所问的问题,如果OP在这方面有问题,请问另一个问题或查看一些参考资料(或在评论中提问)。在OP提出请求之前,我不会添加更多细节(与此问题相关)。或许OP只是忘记了
std::swap
,谁知道呢?
namespace std {
    template <typename T>
    void swap(T&, T&);
}
swap(&x, &y);