15533617457 发表于 2020-4-28 17:45:27

课后作业

……
a += b;
b = a - b;
a -= b;
……
这个交换两个数值的代码什么情况下出现bug可以举个例子吗

人造人 发表于 2020-4-28 17:53:55

#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;
}

人造人 发表于 2020-4-28 17:57:43

#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;
}

15533617457 发表于 2020-4-28 21:49:20

人造人 发表于 2020-4-28 17:53


a等于10a加等于b a等于20 20-10=10 b等于10 a再减b a不就等于10吗为什么会出错呢

人造人 发表于 2020-4-28 22:08:33

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;
}

15533617457 发表于 2020-4-29 13:00:50

人造人 发表于 2020-4-28 22:08


为什么会输出0呢

人造人 发表于 2020-4-29 13:48:01

15533617457 发表于 2020-4-29 13:00
为什么会输出0呢

这是 a 和 a 交换

a += a;
a = a - a;
a -= a;

405794672 发表于 2020-4-29 13:56:31

你连输出语句都没有贴出来,怎么会知道为什么输出0。发就发完整的。当然,#include就不用发了

SugarCane88 发表于 2020-4-29 14:16:10

人造人 发表于 2020-4-29 13:48
这是 a 和 a 交换

a += a;


初学容易搞混。
页: [1]
查看完整版本: 课后作业