C 交换指针

新手上路,请多包涵

我正在研究一个交换指针的函数,但我不知道为什么这不起作用。当我在交换函数中打印出 r 和 s 时,值被交换,这让我相信我正在操作一个我不理解的副本,因为我通过引用 p 和 q 传递。

 void swap(int *r, int *s)
{
    int *pSwap = r;
    r = s;
    s = pSwap;
    return;
}

int main()
{
    int p = 7;
    int q = 9;
    swap(&p, &q);
    cout << "p = " << p << "q= " << q << endl;
    return 0;
}

打印:p = 7q = 9

原文由 M K 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 599
2 个回答

在您的 swap 函数中,您只是在更改指针的方向,即更改指针指向的对象(这里,具体是对象的地址 pq )。指针指向的对象根本没有改变。

您可以直接使用 std::swap 。或者像下面这样编写你的交换函数:

 void swap(int *r, int *s)
{
   int temp = *r;
   *r = *s;
   *s = temp;
   return;
}

原文由 taocp 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你喜欢 C 的黑暗艺术,我建议使用这个宏:

 #define PTR_SWAP(x, y)  float* temp = x; x = y; y = temp;

到目前为止,这对我有用。

原文由 jake_asks_short_questions 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏