C语言:实现两个变量值的交换有几种办法?各有什么优缺点?
3个回答
展开全部
答:通常用三种办法实现。以下分别结合代码段说明(设变量a、b都正确声并有值)——
中间变量法,如声明一个与a、b同类型的中间变量t,然后t=a;a=b;b=t;就完成了a、b变量值的交换。优点是直观明了,缺点是要多用一个临时变量;这是推荐办法。
可以用a=a+b;b=a-b;a=a-b;三条语句完成。优点显然是节省一个变量,缺点是值太大时会产生溢出错误。
也可以用a=a^b;b=b^a;a=a^b;或a^=b;b^=a;a^=b;完成。优点除了节省一个变量外运行时效很高,缺点是当a和b是同一个变量时会出错变成0——直接用变量操作一般不会出这问题,但用指针操作时两个指针会指向同一个变量,这时就要出错了。
可能还有其他办法,但我不知道了……
展开全部
主流做法是使用一个临时变量,
其他是些特定情况的奇技淫巧
像a=a+b;b=a-b;a=a-b;a=a^b;b=b^a;a=a^b;或a^=b;b^=a;a^=b;都只适合特定类型。
其他是些特定情况的奇技淫巧
像a=a+b;b=a-b;a=a-b;a=a^b;b=b^a;a=a^b;或a^=b;b^=a;a^=b;都只适合特定类型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种所谓的多种方法交换变量基本都没有实际意义了。在十几年前由于内存紧俏,你必须仔细考虑算法中的内存开销,从而出现省一个变量之类的奇异交换方法。但是现在内存已经等于0成本了,所有其他方法都没有啥真正意义,唯一推荐的算法就是中间变量法交换了,因为任何其他方法都降低了代码可读性,而没有任何额外好处
void swap(T& a, T& b) {
T c = a;
a = b;
b= c;
}
void swap(T& a, T& b) {
T c = a;
a = b;
b= c;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询