C++,按指针传递 [复制]

C++, Pass by Pointers [duplicate]

提问人:Jayanth G 提问时间:1/13/2021 更新时间:1/13/2021 访问量:37

问:

我实际上在想这个程序应该抛出一个编译错误(因为,我正在将值传递给交换方法而不是 &a、&b),但我震惊地看到它成功执行。 所以,我发布这个是为了知道它是如何/为什么执行的,没有任何错误。

#include <iostream> 
using namespace std; 

void swap(int* x, int* y) 
{ 
    int z = *x; 
    *x = *y; 
    *y = z; 
} 

int main() 
{ 
    int a = 45, b = 35; 
    cout << "Before Swap\n"; 
    cout << "a = " << a << " b = " << b << "\n";  
    swap(a, b); 

    cout << "After Swap with pass by pointer\n"; 
    cout << "a = " << a << " b = " << b << "\n"; 
} 
C++ 指针 引用 按值传递

评论

2赞 Marek R 1/13/2021
swap(&a, &b);请注意,您正在使用并且有 .using namespace std;std::swap
3赞 tkausl 1/13/2021
因为你是在打电话,而不是你自己打电话。std::swap
0赞 Marek R 1/13/2021
stackoverflow.com/q/1452721/1387438
0赞 Jayanth G 1/13/2021
谢谢你的评论。我只是想知道我是否做对了,所以发生的事情是,当我调用 swap(a,b) 时,因为我没有定义一个接收值的交换函数。因此,它正在 STD 中搜索函数,因为它在那里找到了一个函数,所以它正在执行,对吗?

答:

4赞 MSalters 1/13/2021 #1

正如本网站上经常说的那样,这是一个坏主意。using namespace std;

你打电话给std::swap<int>

评论

0赞 Jayanth G 1/13/2021
嘿,谢谢你抽出时间接受采访。
0赞 Jayanth G 1/13/2021
我只是想知道我是否做对了,所以发生的事情是,当我调用 swap(a,b) 时,因为我没有定义一个接收值的交换函数。因此,它正在 STD 中搜索函数,因为它在那里找到了一个函数,所以它正在执行,对吗?
1赞 MSalters 1/13/2021
它不搜索 .你拿走了所有内容,并把所有东西都放在全局命名空间中,你定义了自己的命名空间。搜索将查看周围的命名空间,但不会查看嵌套命名空间内部。stdstdstd::swap
0赞 Jayanth G 1/13/2021
我明白了,非常感谢您消除了我的疑虑。