首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么swap()有时是通过传递数组来实现的?

为什么swap()有时是通过传递数组来实现的?
EN

Stack Overflow用户
提问于 2010-11-28 05:32:21
回答 2查看 235关注 0票数 7

在一些comp-sci论文和测试中,我看到swap()实现如下:

代码语言:javascript
运行
复制
void swap(int x, int y, int *a)
{
    int t = a[x];
    a[x] = a[y];
    a[y] = t;
}

为什么不像这样简单地实现它:

代码语言:javascript
运行
复制
void swap(int& x, int& y)
{
    int t = x;
    x = y;
    y = t;
}

前者的想法是使调用代码更整洁,而不必索引到前两个参数的数组中吗?我意识到这不是一个非常重要的问题,因为我们应该使用std::swap(),但我仍然很好奇。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-28 05:35:48

并非所有编程语言都支持按引用调用。例如,后一种执行swap的方式不适用于Java。

在包含伪代码的书中,通常有一个约定,传递时不复制数组和指针,而在函数调用中复制其他所有内容。前一种方法不需要对传递参数的方式进行特殊解释。

关于整洁的最后一点,这并没有太大的不同:在前一种情况下,您对交换的调用将是简单的:swap(i, j, a);,而在后一种情况下,您将不得不swap(a[i], a[j]);,在表达式中引入一些括号。

票数 6
EN

Stack Overflow用户

发布于 2010-11-28 05:40:12

您的第二个代码示例是C++,而不是C。C++支持引用参数,但C只支持通过指针间接引用。

我同意第二个实现更干净。为了使其在C中工作,请将每个参数中的&更改为*,并取消对函数中每个xy (也使用*)的引用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4294023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档