看不懂为什么当i=j是会触发BUG,帮忙解释下
……#define SWAP(a, b) (a += b, b = a - b, a -= b)
……
int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, j;
……
SWAP(array, array);// 当 i == j 时,触发 Bug
…… huhao666 发表于 2020-11-8 22:17
C的课后习题
测试了下,发现问题确实在i=j
你再体会下,问题再与,当你aray在变化的时候,他变化的值也会影响到array,才会导致SWAP这个宏失败
我就将你这几句复制进vs中,没提示有错误,错可能错在这一行,但问题确定在这儿吗?是越界了吗? 4goodworld 发表于 2020-11-8 16:01
我就将你这几句复制进vs中,没提示有错误,错可能错在这一行,但问题确定在这儿吗?是越界了吗?
这是一道小甲鱼C的作业题,我复制过来的 把你的代码复制到编译器中,没有报错;
#define SWAP(a, b) {a += b; b = a - b; a -= b;}
你试试这个可以吗? 那肯定是有 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 永恒的蓝色梦想 发表于 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
有啥问题? huhao666 发表于 2020-11-8 18:52
这是一道小甲鱼C的作业题,我复制过来的
想问哪道题,求链接,看看整体的过程 4goodworld 发表于 2020-11-8 21:50
想问哪道题,求链接,看看整体的过程
C的课后习题 4goodworld 发表于 2020-11-8 15:02
测试了下,发现问题确实在i=j
你再体会下,问题再与,当你aray在变化的时候,他变化的值也会影响到arra ...
谢谢大佬,明白了 4goodworld 发表于 2020-11-8 21:49
a与b同为5
a+=b a=5+5=10
b=a-b b=10-5=5
交换的两个是同一位置,a和b一起变,你觉得呢? 永恒的蓝色梦想 发表于 2020-11-9 12:57
交换的两个是同一位置,a和b一起变,你觉得呢?
我起初是脑补云运算,思路没捋对,后来上机写了一遍理解了,哈哈。
页:
[1]