Вопросы

Как правильно поменять местами пустые указатели?

У меня есть задача:
мне нужно поменять местами элементы в массиве с помощью функции обмена, основанной на пустых указателях. Это простой алгоритм пузырьковой сортировки.
Но моя функция void SwapInt(void *x, void *y) не работает! Я имею в виду, что он вызвал правильно, но ничего не сделал. Мой массив предварительной сортировки не меняется. Что здесь может быть не так и как это исправить?

void SwapInt(void *x, void *y)
{
    void *buffer = x;
    x = y;
    y = buffer;
}

bool CmpInt(void *x, void *y)
{
    int *intPtrX = static_cast<int*>(x);
    int *intPtrY = static_cast<int*>(y);
    if(*intPtrX > *intPtrY)
        return true;
    else
        return false;
}

void Sort(int array[], int nTotal, size_t size, void (*ptrSwapInt)(void *x, void *y), bool (*ptrCmpInt)(void *x, void *y))
{
    for (int i = 0; i < nTotal; i++)
    {
        for (int j = 0; j < nTotal - 1; j++)
        {
          if (ptrCmpInt(&array[j] , &array[j + 1]))
          {
            ptrSwapInt(&array[j], &array[j + 1]);
          }
        }
    }
}

PS Я уже посетил StackOverflow_1 и StackOverflow_2, и я до сих пор не понимаю, что не так.

Вы знаете, что есть стандартная функция std::swap, которая работает очень хорошо, верно? Кстати, почему ваш SwapInt принимает два void*? Два int& кажутся более подходящими.   —  person Nikita Albekov    schedule 22.02.2021

Читать:
На 33% меньше инструкций, на 17% меньше доступа к памяти, но в 4 раза быстрее?

Вам нужен указатель или ссылка на эти указатели, если вы хотите воздействовать на них вне функции.   —  person Nikita Albekov    schedule 22.02.2021

Вы меняете локальные переменные, чтобы изменить то, что передается, используйте void SwapInt(void **x, void **y) или void SwapInt(void *&x, void *&y)   —  person Nikita Albekov    schedule 22.02.2021

Вы хотите поменять местами сами указатели или вы хотите поменять местами то, на что они указывают? Если x указывает на 1, а y указывает на 2, хотите ли вы поменять местами 1 и 2 так, чтобы x по-прежнему указывало на одно и то же место, но теперь это место содержит 2? Или вы хотите поменять местами x и y, чтобы x теперь указывало на другое место, но это место по-прежнему содержало то же самое 2, что и раньше?   —  person Nikita Albekov    schedule 22.02.2021

Похожие записи

Airflow ExternalTaskSensor с различным интервалом планировщика

admin

Список вставок Flutter sqflite ‹String›

admin

Ошибка при запуске `gatsby build` с Kentico Kontent

admin

Булева функция в C

admin

Что происходит с моей программой на Python, скажите, пожалуйста? Как оба утверждения if else могут быть истинными?

admin

Как заставить моего бота отвечать только на реакцию на конкретное сообщение? | discord.py

admin