我有我的功能,我在那里填充targetBubble
,但在调用此函数后它没有被填充,但我知道它已填充此函数,因为我有输出代码。
bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) {
targetBubble = bubbles[i];
}
我正在传递像这样的指针
Bubble * targetBubble = NULL;
clickOnBubble(mousePos, bubbles, targetBubble);
为什么它不起作用?感谢
答案 0 :(得分:76)
因为您传递的是指针副本。要更改指针,您需要这样的东西:
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];
}
答案 1 :(得分:24)
您正在按值传递指针。
如果要更新,请将引用传递给指针。
bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
答案 2 :(得分:20)
如果你写
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
答案 3 :(得分:7)
除非通过(非常量)引用或双指针传递指针,否则无法更改指针。按值传递会生成对象的副本,对对象的任何更改都将对副本进行,而不是对象。如果传递值,可以更改指针指向的对象,但不能更改指针本身。
阅读此问题以帮助更详细地了解差异When to pass by reference and when to pass by pointer in C++?