课后作业
……a += b;
b = a - b;
a -= b;
……
这个交换两个数值的代码什么情况下出现bug可以举个例子吗 #include <stdio.h>
void swap(int *a, int *b) {
*a += *b;
*b = *a - *b;
*a -= *b;
}
int main(void) {
int a = 10;
swap(&a, &a);
printf("%d\n", a);
return 0;
}
#include <stdio.h>
#define swap(a, b) ({ \
a += b; \
b = a - b; \
a -= b;})
int main(void) {
int a = 10;
int b = 1;
swap(a, b);
printf("%d\n", a);
printf("%d\n", b);
swap(a, a);
printf("%d\n", a);
return 0;
}
人造人 发表于 2020-4-28 17:53
a等于10a加等于b a等于20 20-10=10 b等于10 a再减b a不就等于10吗为什么会出错呢 15533617457 发表于 2020-4-28 21:49
a等于10a加等于b a等于20 20-10=10 b等于10 a再减b a不就等于10吗为什么会出错呢
#include <stdio.h>
#define swap(a, b) ({ \
a += b; \
b = a - b; \
a -= b;})
int main(void) {
int a = 10;
swap(a, a);
printf("%d\n", a);
return 0;
}
人造人 发表于 2020-4-28 22:08
为什么会输出0呢
15533617457 发表于 2020-4-29 13:00
为什么会输出0呢
这是 a 和 a 交换
a += a;
a = a - a;
a -= a;
你连输出语句都没有贴出来,怎么会知道为什么输出0。发就发完整的。当然,#include就不用发了 人造人 发表于 2020-4-29 13:48
这是 a 和 a 交换
a += a;
初学容易搞混。
页:
[1]