関数があり、targetBubble
を埋めていますが、この関数を呼び出した後は埋められませんが、出力コードがあるため、この関数で埋められていることがわかります。
bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) {
targetBubble = bubbles[i];
}
そして、私はこのようなポインタを渡しています
Bubble * targetBubble = NULL;
clickOnBubble(mousePos, bubbles, targetBubble);
なぜ機能しないのですか?ありがとう
ポインタのコピーを渡しているからです。ポインターを変更するには、次のようなものが必要です。
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];
}
ポインタを値渡ししています。
更新する場合は、ポインタへの参照を渡します。
bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
書いたら
int b = 0;
foo(b);
int foo(int a)
{
a = 1;
}
aはbのコピーであるため、「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
(非const)参照またはダブルポインターとして渡さない限り、ポインターを変更することはできません。値渡しはオブジェクトのコピーを作成し、オブジェクトへの変更はオブジェクトではなくコピーに対して行われます。ポインターが指すオブジェクトは変更できますが、値で渡す場合はポインター自体は変更できません。
この質問を読んで、相違点をより詳細に理解するのに役立ててください C++で参照渡しする場合とポインタ渡しする場合