鱼C论坛

 找回密码
 立即注册
查看: 1950|回复: 8

c语言s1e23作业题

[复制链接]
发表于 2021-6-4 17:01:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
通常我们交换两个变量的值需要使用到一个临时变量,代码如下:
……
temp = a;
a = b;
b = temp;
……
小明童鞋说其实大可不必使用临时变量,他这么写:
……
a += b;
b = a - b;
a -= b;
……
请问小明的办法可行吗?
答:在大部分情况下,小明的方案是奏效的。不过有一种情况需要担心,就是在颠倒同一个变量时,这个代码是无法正常运行的。
比如:
……
#define SWAP(a, b) (a += b, b = a - b, a -= b)
……
int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, j;
……
SWAP(array[i], array[j]);  // 当 i == j 时,触发 Bug
……
问题:咋出现bug了,没看出来。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-4 17:31:31 | 显示全部楼层
b = a - b
a和b是同一个变量 减了是0了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 17:42:19 | 显示全部楼层
kogawananari 发表于 2021-6-4 17:31
b = a - b
a和b是同一个变量 减了是0了

不是先执行的a+=b再执行的b=a-b吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 17:47:18 | 显示全部楼层
王之叹息 发表于 2021-6-4 17:42
不是先执行的a+=b再执行的b=a-b吗?

a+=b 实际上是 a和b都乘以2了 (a就是b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 17:52:50 | 显示全部楼层
kogawananari 发表于 2021-6-4 17:47
a+=b 实际上是 a和b都乘以2了 (a就是b)

嗯,,,,,a+=b不是跟a=a+b一样吗?而且a就是a,b就是b,只不过是他们俩的值一样,为什么说a就是b啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 18:05:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 18:42:44 | 显示全部楼层
王之叹息 发表于 2021-6-4 17:52
嗯,,,,,a+=b不是跟a=a+b一样吗?而且a就是a,b就是b,只不过是他们俩的值一样,为什么说a就是b啊?

宏函数相当于是传的引用进去的 传的同一个变量进去就是同一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 18:57:14 | 显示全部楼层
王之叹息 发表于 2021-6-4 17:52
嗯,,,,,a+=b不是跟a=a+b一样吗?而且a就是a,b就是b,只不过是他们俩的值一样,为什么说a就是b啊?

想一想数组的特性(同一指针)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 18:58:46 | 显示全部楼层
本帖最后由 帅周 于 2021-6-4 19:02 编辑
王之叹息 发表于 2021-6-4 17:52
嗯,,,,,a+=b不是跟a=a+b一样吗?而且a就是a,b就是b,只不过是他们俩的值一样,为什么说a就是b啊?


本质都是是*(array+i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 12:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表