1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>

// Функция swap_wrong не работает, так как местами меняются только
// локальные копии переменных, а не те переменные, которые будут
// указаны при вызове переменных.
void swap_wrong(int x, int y)
{
	printf("x = %d, y = %d\n", x, y);
	int temp = x;
	x = y;
	y = temp;
	printf("x = %d, y = %d\n", x, y);
}

// Рабочая функция, принимающая два указателя.
void swap(int *x, int *y)
{
	printf("x = %d, y = %d\n", *x, *y);
	int temp = *x;
	*x = *y;
	*y = temp;
	printf("x = %d, y = %d\n", *x, *y);
}

int main()
{
	int a = 10, b = 3;
	printf("a = %d, b = %d\n", a, b);
	swap(&a, &b); // Делаем из переменных a и b указатели, чтобы
        // Функция swap получила доступ к переменным функции main.
	printf("a = %d, b = %d\n", a, b);
	return 0;
}