Функция swap c не работает

Почему не работает эта функция подкачки? (замена строк в C)

Я пытаюсь поменять местами 2 записи в массиве строк, но моя функция swap не меняет местами при вызове.

Может ли кто-нибудь определить и объяснить мою ошибку?

3 ответа

C строго передается по значению. Вы передаете значения ptsr[0] и pstr[1] в swap . Он меняет местами, где хранятся эти два значения, но это не влияет на вызывающую функцию. Рассматривать:

Это то же самое, что и ваша функция подкачки, только вместо этого используется int . Должно быть довольно ясно, что если вы вызываете swap(1,2); , функция swap просто помещает 2 туда, где он хранил 1 , и наоборот, но это не влияет на что-нибудь в звонилке.

То же самое, если вы сделаете это:

Поскольку все, что вы передали в swap , это значения 2 и 3 , это никак не может повлиять на значения i и j .

И то же самое с вашей функцией обмена, если вы сделаете это:

Функция получает «привет» и «мир» и меняет местами, где хранятся эти два указателя. Это не влияет на j или k в вызывающей стороне.

C строго передается по значению. Какие бы параметры вы ни передали функции, функция получает только значения.

Функция в вопросе меняет местами только значения своего аргумента. Аргументы являются копиями элементов массива, поэтому функция swap не действует.

Чтобы поменять местами указатели в массиве, вы должны передать их адреса и изменить прототип функции подкачки:

Функции принимают свои аргументы по значению.

Это функция swap (для которой вы забыли указать тип возврата void )

Работает с копиями значений выражений ptsr[0] и ptsr[1] . Изменение копий не влияет на исходные указатели.

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

Как видите, переменные и ptsr[0] и ptsr[1] не были изменены.

Чтобы изменить объект (который, в частности, может иметь тип указателя) в функции, вам необходимо передать его функции по ссылке.

Читайте также:  Не работает приложение mi wifi не видит

В C передача по ссылке означает передачу объекта косвенно через указатель на него.

Таким образом, функция swap будет выглядеть так

И функция должна вызываться. like

Или как то же самое

Разыменуя указатели на указатели t1 и t2 , функция получает прямой доступ к исходному указателю ptsr[0] и ptsr[1] меняя местами их значения.

Источник

Есть ли встроенная функция swap в C?

есть ли встроенная функция swap в C, которая работает без использования третьей переменной?

11 ответов

нет.
В C++, но он работает как c = a;a = b; b = c;
C++ встроенная функция swap: swap(first,second);
Проверьте это: http://www.cplusplus.com/reference/algorithm/swap/

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

вы также можете проверить это:

почему вы не хотите использовать третью переменную? Это самый быстрый способ на подавляющем большинстве архитектур.

на алгоритм подкачки XOR работает без третьей переменной, но это проблематично в двух направлениях:

  1. переменные должны быть различны, т. е. swap(&a, &a) не будет работать.
  2. это медленнее в целом.

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

чтобы ответить на ваш вопрос напрямую, нет никакой функции подкачки в стандартном C, хотя было бы тривиально писать.

если вы хотите C solotion, а не C++ один, вы можете сделать его макросом, по крайней мере, используя расширение GCC, чтобы он был достаточно общим, что-то вроде

остерегайтесь трюков, таких как заклинания swap(t[i++],i) ; чтобы избежать их, используйте оператор адресу & . И вам лучше использовать временный (для целых чисел есть известный и бесполезный трюк с exclusive-or).

PS: я использую две локальные переменные _x и _y (но я мог бы использовать только одну локальную переменную) для лучшей читаемости, а также, возможно, для включения дополнительных оптимизаций компилятора.

Источник

Реализация метода обмена значениями (Swap)

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

Читайте также:  Как настроить модем для каналов

Существует ли в Лазарусе процедура Swap для обмена объектов местами?
Есть ли процедура как в делфи (procedure Swap) для lazarus? Требуется вспомогательная процедура.

Реализация функции swap
Здравствуйте. Как реализовать функцию swap в python? Пишу вот такой код: def swap(list, i.

Решение

Потому что int является значимым типом, следовательно переменные этого типа копируются по значению: при передаче в метод и присваивании другой переменной создается копия.
Передавая в метод элементы массива array[i] и array[i+1], вы передаете их копии и все, что происходит с ними внутри метода, не затрагивает оригиналы.

Решение предложено выше: при использовании модификатора ref переменные будут передаваться по ссылке.

kolorotur, Спасибо! А можно это засунуть в универсальную Swap() , чтобы вместо (LongCSharpParametrNameA,LongCSharpParametrNameB) = (LongCSharpParametrNameB, LongCSharpParametrNameA) использовать Swap(LongCSharpParametrNameA,LongCSharpParametrNameB) ?

Потому что в предложенном варианте

Нет, т.к. аргументом не всегда является переменная.
Собственно, именно в тех случаях, когда нельзя через ref.

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

Составление метода выбора и метода обмена
Расположить в порядке убывания четные элементы левого нижнего треугольника матрицы.

Нужно перевести программу из паскаль в делфи . Сама программа этот реализация метода гауса и метода зейделя
Это все в паскале сделано. В программе идет в начале описание меня а аотом сама подпрограмма.

Процедура обмена значениями
У меня проблема: не работает процедура, если использую массив. Что делаю не так? procedure.

Составить программу обмена значениями
Помогите написать программу на, pascal полностью

Программа обмена значениями двух переменных a и b
3.8 Составить программу обмена значениями двух переменных a и b. Разработать два варианта решения.

Составить программу обмена значениями 2-х переменных
Составить программу обмена значениями 2-х переменных.

Источник

Функция SWAP

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Функция swap(t, x, y) в виде макроса
Реализуйте функцию swap(t, x, y) в виде макроса, который осуществляет обмен значениями указанного.

Swap
Введите одно целое число n в первой строке (n 4

Надеюсь, регистр поменялся из-за не правильного тэга.
В таком виде код смотреть бессмысленно.

Читайте также:  Сломался зарядник для аккумулятора

А ты хочешь, чтобы эту прелесть тебе отладили?
А чтобы дополнили, подробно опиши, что это за оператор SWAP. В С++ такого нет и бэйсик ради тебя наврятли учить будут.

Оператор обменивает величины двух переменных.

Формат: SWAP V1,V2

V1 и V2 — переменные действительного, целого или строкового типа.

Тип обеих переменных должен совпадать.

на экране: А= 500 В= 5

(Да регистр поменялся из-за не правильного тэга)

700 строк кода отбрасывают всякое желание разбираться, тебе наверное надо будет во фираланс.

Проблемы с функцией swap
Я написал код для симметрии матрицы относительно побочной диагонали, на он ругается на void.

Чума на оба Ваши swap-а!
Во-первых, продолжаю пополнять ликбезную копилку (надеюсь, заданные мною топики имеют эту ценность.

Массив. Без функции swap
/** * Заполнить массив из 10 элементов случайными чис-лами в интервале и отсортировать первую.

Обмен двух строк (swap) с использованием функции
Нужно обменять содержимое двух строк. Я так понимаю в main мы создаем две константных строки s1,s2.

Источник

Функция swap c не работает

Помощь в написании контрольных, курсовых и дипломных работ здесь.

swap
Cи подчеркивает swap и говорит что он не определен! в данном случаи а это массив, а i и j индексы.

swap
max, swap, min входят в это стандартные функции?

SWAP
Кто может объяснить как выходит (10 10) #include using namespace std; void Swap(int.

Функция swap()
А что выгоднее с точке зрения быстродействия — использование стандартной функции или «ручной» обмен.

Ошибка в Swap
Написано на С++ Не могу разобраться в ошибки. Раньше не пользовался Swap альтернативы не вижу.

Оператор swap
Столкнулся с данной программой, и не совсем понимаю, как тут работает оператор swap. #include.

Не работает swap
k.name.swap(s); s — строка, k — массив структур

Функция swap
Всем привет. У меня проблема, при чем проблема не с самими указателями, а с функцией swap.

Атомарный swap
Добрый день, я правильно понимаю что в плюсах нету функции атомарного обмена двух переменных .

Функция swap
Доброго времени суток! Задался вопросом о реализации алгоритмов обмена двух переменных, но кроме.

Источник

Оцените статью