C语言:实现两个变量值的交换有几种办法?各有什么优缺点?

 我来答
White_MouseYBZ
2021-02-14 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6568万
展开全部

答:通常用三种办法实现。以下分别结合代码段说明(设变量a、b都正确声并有值)——

  1. 中间变量法,如声明一个与a、b同类型的中间变量t,然后t=a;a=b;b=t;就完成了a、b变量值的交换。优点是直观明了,缺点是要多用一个临时变量;这是推荐办法。

  2. 可以用a=a+b;b=a-b;a=a-b;三条语句完成。优点显然是节省一个变量,缺点是值太大时会产生溢出错误。

  3. 也可以用a=a^b;b=b^a;a=a^b;或a^=b;b^=a;a^=b;完成。优点除了节省一个变量外运行时效很高,缺点是当a和b是同一个变量时会出错变成0——直接用变量操作一般不会出这问题,但用指针操作时两个指针会指向同一个变量,这时就要出错了。

可能还有其他办法,但我不知道了……

百度网友12ee0fd
2021-02-14 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:2335万
展开全部
主流做法是使用一个临时变量,
其他是些特定情况的奇技淫巧
像a=a+b;b=a-b;a=a-b;a=a^b;b=b^a;a=a^b;或a^=b;b^=a;a^=b;都只适合特定类型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
arongustc
科技发烧友

2021-02-14 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:5935万
展开全部
这种所谓的多种方法交换变量基本都没有实际意义了。在十几年前由于内存紧俏,你必须仔细考虑算法中的内存开销,从而出现省一个变量之类的奇异交换方法。但是现在内存已经等于0成本了,所有其他方法都没有啥真正意义,唯一推荐的算法就是中间变量法交换了,因为任何其他方法都降低了代码可读性,而没有任何额外好处

void swap(T& a, T& b) {
T c = a;
a = b;
b= c;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式