C++ 函数不更改传递的指针C++;
我有我的函数,我正在那里填充C++ 函数不更改传递的指针C++;,c++,function,pointers,C++,Function,Pointers,我有我的函数,我正在那里填充targetBubble,但是调用这个函数后它没有被填充,但是我知道它被填充在这个函数中,因为我有输出代码 bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) { targetBubble = bubbles[i]; } 为什么它不起作用?谢谢,因为您正在传递指针的副本。要更改指针,需要以下内容:
targetBubble
,但是调用这个函数后它没有被填充,但是我知道它被填充在这个函数中,因为我有输出代码
bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) {
targetBubble = bubbles[i];
}
为什么它不起作用?谢谢,因为您正在传递指针的副本。要更改指针,需要以下内容:
void foo(int **ptr) //pointer to pointer
{
*ptr = new int[10]; //just for example, use RAII in a real world
}
或
除非通过(非常量)引用或作为双指针传递,否则无法更改指针。按值传递将生成对象的副本,并且对对象所做的任何更改都将生成副本,而不是对象。如果按值传递,则可以更改指针指向的对象,但不能更改指针本身
阅读此问题有助于更详细地理解差异您正在按值传递指针 如果要更新指针,请将引用传递给指针
bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
bool点击气泡(sf::Vector2i和鼠标点、std::vector气泡、气泡*&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
}
hth+1。在C++上下文中正确的第一个答案。建议使用双间接指针的答案是C语言的老方法,但是当我尝试你的方法时,它在这行崩溃了代码>我传递的参数如下<代码>点击泡泡(鼠标、泡泡和目标泡泡)代码>@user1295618:您看到了什么错误?可能我没钱了range@user1295618:请提出一个新问题,并在那里发布新代码。因为如果没有看到你的实际情况,很难说问题出在哪里code@user1295618:它们是一样的,应该两者都能工作。可能您的程序中有未定义的行为,并且从启动到启动,其工作方式不同launch@Andrew第一种可能通过指针解引用导致分段错误?
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
}
int* b = 0;
foo(&b);
int foo(int** a)
{
*a = 1; // here you changing what b is pointing to
}