#include <stdio.h>
void swapA (int a, int b) {
printf(" start A: a: %d b: %d\n", a
, b
); int c = a;
a = b;
b = c;
printf(" end A: a: %d b: %d\n", a
, b
); }
void swapB(int* a, int* b) {
printf(" start B: a: %d b: %d\n", *a
, *b
); int temp = *a;
*a = *b;
*b = temp;
printf(" end B: a: %d b: %d\n", *a
, *b
); }
int main(void) {
int foo = 42;
int bar = 4;
swapA(foo, bar);
printf("after A: foo: %d bar: %d\n", foo
, bar
); /* why didn't anything change? */
swapB(&foo, &bar);
printf("after B: foo: %d bar: %d\n", foo
, bar
); /* what was different? */
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHN3YXBBIChpbnQgYSwgaW50IGIpIHsKCXByaW50ZigiICBzdGFydCBBOiBhOiAlZCBiOiAlZFxuIiwgYSwgYik7CglpbnQgYyA9IGE7CglhID0gYjsKCWIgPSBjOwoJcHJpbnRmKCIgICAgZW5kIEE6IGE6ICVkIGI6ICVkXG4iLCBhLCBiKTsKfQoKdm9pZCBzd2FwQihpbnQqIGEsIGludCogYikgewoJcHJpbnRmKCIgIHN0YXJ0IEI6IGE6ICVkIGI6ICVkXG4iLCAqYSwgKmIpOwogICAgaW50IHRlbXAgPSAqYTsKICAgICphID0gKmI7CiAgICAqYiA9IHRlbXA7CglwcmludGYoIiAgICBlbmQgQjogYTogJWQgYjogJWRcbiIsICphLCAqYik7Cn0KCmludCBtYWluKHZvaWQpIHsKCWludCBmb28gPSA0MjsKCWludCBiYXIgPSA0OwoJCglzd2FwQShmb28sIGJhcik7CglwcmludGYoImFmdGVyIEE6IGZvbzogJWQgYmFyOiAlZFxuIiwgZm9vLCBiYXIpOwoJLyogd2h5IGRpZG4ndCBhbnl0aGluZyBjaGFuZ2U/ICovCgkKCXN3YXBCKCZmb28sICZiYXIpOwoJcHJpbnRmKCJhZnRlciBCOiBmb286ICVkIGJhcjogJWRcbiIsIGZvbywgYmFyKTsKCS8qIHdoYXQgd2FzIGRpZmZlcmVudD8gKi8KCXJldHVybiAwOwp9Cg==