函数不会改变传递的指针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 + +?