鱼C论坛

 找回密码
 立即注册
查看: 1763|回复: 11

[已解决]看不懂为什么当i=j是会触发BUG,帮忙解释下

[复制链接]
发表于 2020-11-8 15:02:48 | 显示全部楼层 |阅读模式
5鱼币
……
#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
……
最佳答案
2020-11-8 15:02:49


微信截图_20201108224618.png
测试了下,发现问题确实在i=j
你再体会下,问题再与,当你aray[ii]在变化的时候,他变化的值也会影响到array[j],才会导致SWAP这个宏失败

最佳答案

查看完整内容

测试了下,发现问题确实在i=j 你再体会下,问题再与,当你aray在变化的时候,他变化的值也会影响到array[j],才会导致SWAP这个宏失败
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-8 15:02:49 | 显示全部楼层    本楼为最佳答案   


微信截图_20201108224618.png
测试了下,发现问题确实在i=j
你再体会下,问题再与,当你aray[ii]在变化的时候,他变化的值也会影响到array[j],才会导致SWAP这个宏失败
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-8 16:01:07 | 显示全部楼层
我就将你这几句复制进vs中,没提示有错误,错可能错在这一行,但问题确定在这儿吗?是越界了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-8 18:52:23 | 显示全部楼层
4goodworld 发表于 2020-11-8 16:01
我就将你这几句复制进vs中,没提示有错误,错可能错在这一行,但问题确定在这儿吗?是越界了吗?

这是一道小甲鱼C的作业题,我复制过来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-8 19:14:03 | 显示全部楼层
把你的代码复制到编译器中,没有报错;
#define SWAP(a, b) {a += b; b = a - b; a -= b;}
你试试这个可以吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-8 19:28:04 | 显示全部楼层
那肯定是有 BUG 啊……

当 i==j 时,交换的两个是同一位置,即 a=b。
设这个内容为 x,x=5,那么:
a += b : x = x + x = 5 + 5 = 10
b = a - b : x = x - x = 10 - 10 = 0
a -= b : x = x - x = 0 - 0 = 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-8 21:49:45 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-11-8 19:28
那肯定是有 BUG 啊……

当 i==j 时,交换的两个是同一位置,即 a=b。
设这个内容为 x,x=5,那么:

a与b同为5
a+=b a=5+5=10
b=a-b b=10-5=5
a-=b a=10-5=5
有啥问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-8 21:50:17 | 显示全部楼层
huhao666 发表于 2020-11-8 18:52
这是一道小甲鱼C的作业题,我复制过来的

想问哪道题,求链接,看看整体的过程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-8 22:17:26 | 显示全部楼层
4goodworld 发表于 2020-11-8 21:50
想问哪道题,求链接,看看整体的过程

C的课后习题
a075277eac4dd0e9f59dcc10d150b9a.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-9 09:05:44 | 显示全部楼层
4goodworld 发表于 2020-11-8 15:02
测试了下,发现问题确实在i=j
你再体会下,问题再与,当你aray在变化的时候,他变化的值也会影响到arra ...

谢谢大佬,明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-9 12:57:58 | 显示全部楼层
4goodworld 发表于 2020-11-8 21:49
a与b同为5
a+=b a=5+5=10
b=a-b b=10-5=5

交换的两个是同一位置,a和b一起变,你觉得呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-9 22:40:32 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-11-9 12:57
交换的两个是同一位置,a和b一起变,你觉得呢?

我起初是脑补云运算,思路没捋对,后来上机写了一遍理解了,哈哈。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 17:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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