函数不会改变传递的指针C ++

我有我的function,我在那里填充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; } 

你不改变'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 } 

心连心

除非通过(非const)引用或作为双指针传递指针,否则不能更改指针。 按值传递会创build对象的副本,而对对象的任何更改都将作为副本,而不是对象。 您可以更改指针所指向的对象,但是如果按值传递,则不会指向指针本身。

有一个阅读这个问题,以帮助更详细地了解差异当通过引用传递和何时传递指针在C + +?