#include <stdio.h>
void swap(void **left, void **right)
{
puts("\nswap function:\n\n");
printf("left : %p - *left: %p - **left(should be a): %i\n", left, *left, *((int *)*left));
printf("right : %p - *right: %p - **right(should be b): %i\n\n", right, *right, *((int *)*right));
void *PNT_left = (void *) left;
void *PNT_right = (void *) right;
printf("PNT_left: %p - *PNT_left: %p\n", (int *)PNT_left
, *((int *)PNT_left
)); printf("PNT_right: %p - *PNT_right: %p\n\n", (int *)PNT_right
, *((int *)PNT_right
));
/* swap pointers of pointers*/
void *tmpPNT = PNT_left;
PNT_left = PNT_right;
PNT_right = tmpPNT;
puts("Pointer of pointer swapped:"); printf("PNT_left: %p - *PNT_left: %p\n", (int *)PNT_left
, *((int *)PNT_left
)); printf("PNT_right: %p - *PNT_right: %p\n\n", (int *)PNT_right
, *((int *)PNT_right
));
/* swap pointers*/
tmpPNT = *(int *)PNT_left;
*((int*)PNT_left) = *((int *)PNT_right);
*((int*)PNT_right) = tmpPNT;
puts("Pointer swapped:"); printf("PNT_left: %p - *PNT_left: %p\n", (int *)PNT_left
, *((int *)PNT_left
)); printf("PNT_right: %p - *PNT_right: %p\n\n", (int *)PNT_right
, *((int *)PNT_right
));
printf("left : %p - *left: %p - **left: %i\n", left, *left, *((int *)*left));
printf("right : %p - *right: %p - **right: %i\n\n", right, *right, *((int *)*right));
puts("End Swap function.\n\n\n"); return;
}
int main(void)
{
int a = 1, b = 2;
int *ap, *bp;
ap = &a;
bp = &b;
printf(" a: %i - b: %i\n", a
, b
); printf(" &a: %p - &b: %p\n", &a
, &b
); printf(" ap: %p - bp: %p\n", ap
, bp
);
swap(&ap, &bp);
printf(" a: %i - b: %i\n", a
, b
); printf(" ap: %p - bp: %p\n", ap
, bp
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHN3YXAodm9pZCAqKmxlZnQsIHZvaWQgKipyaWdodCkKewpwdXRzKCJcbnN3YXAgZnVuY3Rpb246XG5cbiIpOwoKcHJpbnRmKCJsZWZ0IDogICVwICAgLSAgICpsZWZ0OiAgJXAgICAtICAgKipsZWZ0KHNob3VsZCBiZSBhKTogICVpXG4iLAogICAgICAgICAgICBsZWZ0LCAqbGVmdCwgKigoaW50ICopKmxlZnQpKTsKcHJpbnRmKCJyaWdodCA6ICVwICAgLSAgICpyaWdodDogJXAgICAtICAgKipyaWdodChzaG91bGQgYmUgYik6ICVpXG5cbiIsCiAgICAgICAgICAgIHJpZ2h0LCAqcmlnaHQsICooKGludCAqKSpyaWdodCkpOwoKdm9pZCAqUE5UX2xlZnQgPSAgKHZvaWQgKikgbGVmdDsKdm9pZCAqUE5UX3JpZ2h0ID0gKHZvaWQgKikgcmlnaHQ7CgpwdXRzKCJCZWZvcmUgc3dhcDoiKTsKcHJpbnRmKCJQTlRfbGVmdDogICVwICAgLSAgICpQTlRfbGVmdDogJXBcbiIsIChpbnQgKilQTlRfbGVmdCwgKigoaW50ICopUE5UX2xlZnQpKTsKcHJpbnRmKCJQTlRfcmlnaHQ6ICVwICAgLSAgICpQTlRfcmlnaHQ6ICVwXG5cbiIsIChpbnQgKilQTlRfcmlnaHQsICooKGludCAqKVBOVF9yaWdodCkpOwoKLyogc3dhcCBwb2ludGVycyBvZiBwb2ludGVycyovCnZvaWQgKnRtcFBOVCA9IFBOVF9sZWZ0OwpQTlRfbGVmdCA9IFBOVF9yaWdodDsKUE5UX3JpZ2h0ID0gdG1wUE5UOwoKcHV0cygiUG9pbnRlciBvZiBwb2ludGVyIHN3YXBwZWQ6Iik7CnByaW50ZigiUE5UX2xlZnQ6ICAlcCAgIC0gICAqUE5UX2xlZnQ6ICVwXG4iLCAoaW50ICopUE5UX2xlZnQsICooKGludCAqKVBOVF9sZWZ0KSk7CnByaW50ZigiUE5UX3JpZ2h0OiAlcCAgIC0gICAqUE5UX3JpZ2h0OiAlcFxuXG4iLCAoaW50ICopUE5UX3JpZ2h0LCAqKChpbnQgKilQTlRfcmlnaHQpKTsKCi8qIHN3YXAgcG9pbnRlcnMqLwp0bXBQTlQgPSAqKGludCAqKVBOVF9sZWZ0OwoqKChpbnQqKVBOVF9sZWZ0KSA9ICooKGludCAqKVBOVF9yaWdodCk7CiooKGludCopUE5UX3JpZ2h0KSA9IHRtcFBOVDsKCnB1dHMoIlBvaW50ZXIgc3dhcHBlZDoiKTsKcHJpbnRmKCJQTlRfbGVmdDogICVwICAgLSAgICpQTlRfbGVmdDogJXBcbiIsIChpbnQgKilQTlRfbGVmdCwgKigoaW50ICopUE5UX2xlZnQpKTsKcHJpbnRmKCJQTlRfcmlnaHQ6ICVwICAgLSAgICpQTlRfcmlnaHQ6ICVwXG5cbiIsIChpbnQgKilQTlRfcmlnaHQsICooKGludCAqKVBOVF9yaWdodCkpOwoKcHV0cygiSW5mbzoiKTsKcHJpbnRmKCJsZWZ0IDogICVwICAgLSAgICpsZWZ0OiAgJXAgICAtICAgKipsZWZ0OiAgJWlcbiIsCiAgICBsZWZ0LCAqbGVmdCwgKigoaW50ICopKmxlZnQpKTsKcHJpbnRmKCJyaWdodCA6ICVwICAgLSAgICpyaWdodDogJXAgICAtICAgKipyaWdodDogJWlcblxuIiwgCiAgICByaWdodCwgKnJpZ2h0LCAqKChpbnQgKikqcmlnaHQpKTsKCnB1dHMoIkVuZCBTd2FwIGZ1bmN0aW9uLlxuXG5cbiIpOwpyZXR1cm47Cn0KCmludCBtYWluKHZvaWQpCnsKICAgIGludCBhID0gMSwgYiA9IDI7CiAgICBpbnQgKmFwLCAqYnA7CiAgICBhcCA9ICZhOwogICAgYnAgPSAmYjsKCiAgICBwdXRzKCJCZWZvcmUgLSBJbmZvOiIpOwogICAgcHJpbnRmKCIgYTogJWkgICAtICAgIGI6ICVpXG4iLCBhLCBiKTsKICAgIHByaW50ZigiICZhOiAlcCAgIC0gICAgJmI6ICVwXG4iLCAmYSwgJmIpOwogICAgcHJpbnRmKCIgYXA6ICVwICAgLSAgICBicDogJXBcbiIsIGFwLCBicCk7CgogICAgc3dhcCgmYXAsICZicCk7CgogICAgcHV0cygiQWZ0ZXIgLSBJbmZvOiIpOwogICAgcHJpbnRmKCIgYTogJWkgICAtICAgIGI6ICVpXG4iLCBhLCBiKTsKICAgIHByaW50ZigiIGFwOiAlcCAgIC0gICAgYnA6ICVwXG4iLCBhcCwgYnApOwogICAgcmV0dXJuIDA7Cn0KCg==