Как мне обновить значение void ** в другой функции и сохранить его в другой? - PullRequest
0 голосов
/ 12 декабря 2018

Если у меня есть код, например, такой:

#include <iostream>

using namespace std;
void swap(void** a) {
    int tmp = 5;
    void* b = &tmp;
    a = &b;
}

int main()
{
    int x=11;
   void* y=&x;
   void** z=&y;
   swap(z);
   void* a = *z;
   cout << *(int*)a << endl;

   return 0;
}

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

Я просто не очень хорош с указателями.

РЕДАКТИРОВАТЬ:Я должен отправить, чтобы поменять аргумент с void**

1 Ответ

0 голосов
/ 12 декабря 2018

Вы не можете обновить значение void** (то есть на что оно указывает), передав его в функцию, которая принимает void**.Это позволяет изменять только указанную память, а не адрес, на который указывает указатель, который вы передаете функции.

Чтобы обновить то, на что он указывает, параметр должен быть void**& или void***.

Независимо от того, какое решение вы выберете, код, который вы разместили, чрезвычайно подвержен ошибкам и чертовски хорош в обслуживании.Вам следует полностью избегать этого.

Также обратите внимание, что &tmp становится недействительным, пока вы выходите из функции, потому что локальная переменная tmp уничтожается.

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