C ++ Функция для обмена указателями работает в рамках - PullRequest
0 голосов
/ 02 декабря 2011

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

Ниже приведен фрагмент кода.

bool Swap(int* pComp, int* pNew)
    {
        pComp = pNew;
        return true;
    }

Любой совет с благодарностью

Ответы [ 5 ]

9 голосов
/ 02 декабря 2011

Как насчет:

#include <algorithm>

std::swap(pComp, pNew);
1 голос
/ 02 декабря 2011

Вот вы, Себ:

bool Swap(int*& pComp, int*& pNew)
    {
        int* t = pComp;
        pComp = pNew;
        pNew = t;
        return true;
    }
1 голос
/ 02 декабря 2011

Во-первых, ваш код не меняет указатели: все, что он делает, это присваивает значение pNew для pComp. Причиной того, что программа не выполняет то, что вы ожидаете, является то, что в C и C ++ параметры передаются по значению.

0 голосов
/ 02 декабря 2011

Ваша функция ничего не делает, так как она влияет только на локальные переменные-указатели, которые существуют в области действия функции. Если вы пытаетесь поменять местами два указателя, вам нужно будет сделать:

Swap(int** pComp, int** pNew){
   int* tmp;
   tmp = *pComp;
   *pComp = *pNew;
   *pNew = tmp;
}
0 голосов
/ 02 декабря 2011

Проблема в том, что C ++ передать по значению . Попробуйте вместо этого:

bool Swap(int *&pComp, int *&pNew)
{
    int *temp = pComp;
    pComp = pNew;
    pNew = temp;
    return true;
}

C ++ передавал копию указателей вашей функции Swap.

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