LINUX.ORG.RU

[C][Недоумение]обмен указателями

 ,


0

1

есть классическая ф-ия которую все когда-то писали при знакомсте с указателями: Обмен значениями двух чисел

void swp(int* a, int* b)
{
	int c = *a;
	*a = *b;
	*b = c;
}

Хочу сделать то же самое но изменяя указатели

void swp(int* a, int* b)
{
	int *c = a;
	a = b;
	b = c;
}
Значения указателей меняются внутри ф-ии, т.е. там обмен происходит как я хочу. Но, после выхода из функции все возвращается к начальному состоянию и обмен значениями не происходит. Думаю у меня непонимание архитектуры, или того как работает стек при выходе из ф-ии. Почему указатели возвращяются на свои исходные значения?

★★

void swp(int** a, int** b)
{
	int *c = *a;
	*a = *b;
	*b = c;
}
ckotinko ☆☆☆
()

В функцию передаются только значения переменных, а не сами переменные.
Можно еще почитать про передачу параметров по ссылке и по значению, должно помочь разобраться.

trex6 ★★★★★
()

когда-то при знакомсте с указателями

Ну вот и тебе пора наконец с ними познакомиться.

anonymous
()

тот редкий случай, когда в C++ было бы уместно использовать ссылку на указатель

в C, соответственно, указатель на указатель

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

спасибо всем. Не не , про передачу по ссылке я конечно знал =) и попробовал сделать через двойной указатель. Делал так же как и у первого месье ckotinko, только int** c завел со всеми вытекающими

blokant ★★
() автор топика

Можно без временной переменной, но только для целых. Для указателей я бы так не делал:

void swap_(int *a, int *b)
{
     *a ^= *b;
     *b ^= *a;
     *a ^= *b;
}

nanoolinux ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.