【问题标题】:C++: if swap is callled in another function, why it cannot workC++:如果在另一个函数中调用了 swab,为什么它不能工作
【发布时间】:2023-01-31 14:34:40
【问题描述】:

很好奇为什么 operation2 可以成功交换 a 和 b,而 operation1 不能。(当你 cout a 和 b 时)

operation1:
void exchange(char *a,char*b)
{swap(a,b);}

operation2:
swap(a,b)


(我已经将我的整个代码压缩成上面的几行) (虽然终于意识到operation1有点废话,但还是想不通为什么不行)

【问题讨论】:

  • 由于您没有通过引用传递指针,因此交换发生在 ab 上,它们对于该范围是唯一的。
  • 另外,不要使用 exchange 作为名称,因为我们已经有 myVar = std::exchange(myOldVar, "value-for-old-var");`

标签: c++ function pointers swap


【解决方案1】:

您正在交换传入的局部变量按价值,因此制作了副本并且您正在交换副本,调用者的变量不受影响。

要更新调用者的变量,您需要将它们传入引用反而:

void exchange(char* &a, char* &b)

【讨论】:

    【解决方案2】:

    我认为 operation1 不能交换 a 和 b,因为它交换存储在指针变量 a 和 b 中的地址,而不是它们指向的值。换句话说,它交换指针而不是它们指向的数据。

    operation2 可以交换 a 和 b,因为 swap 很可能是一个标准函数,可以交换两个参数的值,而不管它们的类型。

    【讨论】:

    • 指针可以像其他变量一样交换。如果函数是void exchange(int a, int b) { ... },它也会因为同样的原因而失败,交换的值是原始值的副本。
    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    相关资源
    最近更新 更多