Передача указателя на структуру в функцию [duplicate]

Если вы не возражаете против использования сторонних библиотек, AOL cyclops-react lib (раскрытие я являюсь вкладчиком) имеет расширения для всех типов JDK Collection , включая Список и Карта .

ListX choices;
Map map = choices.toMap(c-> c.getName(),c->c);

31
задан Ian R. O'Brien 30 March 2016 в 15:05
поделиться

4 ответа

Потому что вы передаете копию указателя. Чтобы изменить указатель, вам нужно что-то вроде этого:

void foo(int **ptr) //pointer to pointer
{
    *ptr = new int[10]; //just for example, use RAII in a real world
}

или

void bar(int *& ptr) //reference to pointer (a bit confusing look)
{
    ptr = new int[10];
}
66
ответ дан Andrew 28 August 2018 в 20:28
поделиться

, если вы пишете

int b = 0;
foo(b);

int foo(int a)
{
  a = 1;
}

, вы не меняете 'b', потому что a является копией b

, если вы хотите изменить b, вам нужно будет передать адрес из b

int b = 0;
foo(&b);

int foo(int *a)
{
  *a = 1;
}

одинаково для указателей:

int* b = 0;
foo(b);

int foo(int* a)
{
  a = malloc(10);  // here you are just changing 
                   // what the copy of b is pointing to, 
                   // not what b is pointing to
}

, поэтому для изменения, где b указывает, чтобы передать адрес:

int* b = 0;
foo(&b);

int foo(int** a)
{
  *a = 1;  // here you changing what b is pointing to
}

hth

18
ответ дан Anders K. 28 August 2018 в 20:28
поделиться

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

Прочитайте этот вопрос, чтобы лучше понять различия в деталях . Когда пройти мимо ссылку и когда передать указатель в C ++?

6
ответ дан Community 28 August 2018 в 20:28
поделиться

Вы передаете указатель по значению.

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

bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
21
ответ дан Daniel Daranas 28 August 2018 в 20:28
поделиться