Когда вы говорите: «Затем я отправляю их адреса в swap (), который должен переключать то, на что они указывают».Вы пытаетесь изменить значения адреса в переменных указателя в main, чтобы переключиться на какой бит памяти они указывают?В этом случае вам потребуется еще один шаг перенаправления:
#include <stdio.h>
void swap(int **px, int **py) {
int *tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
int main (void) {
int x, y; /* storage to point to */
int *a, *b;
a = &x;
b = &y;
*a = 1;
*b = 2;
printf("(*a, *b, x, y) == (%d, %d, %d, %d)\n", *a, *b, x, y);
swap(&a, &b);
printf("(*a, *b, x, y) == (%d, %d, %d, %d)\n", *a, *b, x, y);
}
$ ./a.out
(*a, *b, x, y) == (1, 2, 1, 2)
(*a, *b, x, y) == (2, 1, 1, 2)
Значения x
& y
не изменились, но a
указывал на x
и теперь указывает на y
и наоборот для b
.