【问题标题】:C++, Pass by Pointers [duplicate]C ++,指针传递[重复]
【发布时间】:2021-04-17 16:13:18
【问题描述】:

我实际上在想这个程序应该抛出一个编译错误(因为我正在将值传递给交换方法而不是 &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"; 
} 

【问题讨论】:

  • swap(&amp;a, &amp;b); 请注意,您使用的是using namespace std;,并且有std::swap
  • 因为你打电话给std::swap而不是你自己的。
  • 感谢 cmets。我只是想知道我是否做对了,所以发生了什么,当我调用 swap(a,b) 并且因为我没有定义一个接收值的交换函数。因此它在 STD 中搜索函数,因为它在那里找到了一个函数,所以它正在执行,对吗?

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


【解决方案1】:

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

你打电话给std::swap&lt;int&gt;

【讨论】:

  • 嗨,谢谢您的宝贵时间。
  • 我只是想知道我是否做对了,所以发生了什么,当我调用 swap(a,b) 并且因为我没有定义一个接收值的交换函数。因此它在 STD 中搜索函数,因为它在那里找到了一个函数,所以它正在执行,对吗?
  • 它不在std 中搜索。您获取了std 的所有内容并将所有内容放在全局命名空间中,即您定义自己的std::swap 的同一个命名空间。搜索将查看周围的命名空间,而不是嵌套的命名空间内。
  • 我明白了,非常感谢您为我解惑。
猜你喜欢
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 2012-01-24
相关资源
最近更新 更多