Как составить функцию, которая меняет указатели местами?

После выхода из функции swapAdresses() значения у переменных остаются теми же. Почему?

void swapAdresses(int *firstVariable, int *secondVariable)
{
    int *tempAdress = firstVariable;
    firstVariable = secondVariable;
    secondVariable = tempAdress;
    cout << "Адреса переменных поменялись местами" << endl;
}

void main() 
{
    int a = 10;
    int b = 5;

    swapAdresses(&a, &b);
}

Ответы (1 шт):

Автор решения: Harry

Потому что вы поменяли копии адресов :)

Переменные имеют фиксированные адреса, которые изменяться не могут. Так что вы можете только поменять местами значения по адресам:

void swapAdresses(int *firstVariable, int *secondVariable)
{
    int tempAdress = *firstVariable;
    *firstVariable = *secondVariable;
    *secondVariable = tempAdress;
}

Вы можете завести отдельно указатели на переменные и менять их значения:

int a = 10;
int b = 5;

int *pa = &a;
int *pb = &b;

cout << *pa << " " << *pb << endl;

int * t = pa;
pa = pb;
pb = t;

cout << *pa << " " << *pb << endl;

Чтоб сделать это через функцию, в нее надо передавать либо указатели на указатели, либо ссылки на указатели.

Что-то типа

void swapAdresses(int **firstVariable, int **secondVariable)
{
    int *tempAdress = *firstVariable;
    *firstVariable = *secondVariable;
    *secondVariable = tempAdress;
}

int *pa = &a;
int *pb = &b;

cout << *pa << " " << *pb << endl;

swapAdresses(&pa, &pb);

cout << *pa << " " << *pb << endl;
→ Ссылка