C ++ манипулирование и инициализация указателей в функции [duplicate]

Правильный синтаксис - =IF(AA2<=4;X2;0). Обратите внимание на точки с запятой, а не на запятые.

30
задан 30 March 2016 в 18:05

3 ответа

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

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 [ ! d5]

18
ответ дан 15 August 2018 в 16:38

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

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

6
ответ дан 15 August 2018 в 16:38

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

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

bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
21
ответ дан 15 August 2018 в 16:38
  • 1
    +1. Первый ответ, который делает это правильно в контексте C ++. Ответы, предлагающие двунаправленные указатели, - это старая возможность сделать это. – paxdiablo 7 August 2012 в 14:02

Другие вопросы по тегам:

Похожие вопросы: