首页 >后端开发 >C++ >如何修改传递给 C 函数的指针并在调用范围中反映这些更改?

如何修改传递给 C 函数的指针并在调用范围中反映这些更改?

Barbara Streisand
Barbara Streisand原创
2024-12-26 10:15:16440浏览

How Can I Modify a Pointer Passed to a C   Function and Reflect Those Changes in the Calling Scope?

函数行为:在 C 中传递指针

在 C 中,将指针传递给函数允许修改调用范围中的原始变量。但是,在处理指针时,可能会出现某些细微差别。

问题:

考虑一个修改传递指针的函数,如以下示例所示:

bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *> bubbles, Bubble *targetBubble) {
    targetBubble = bubbles[i];
}

尽管修改了函数内的“targetBubble”指针,但更改不会反映在函数之外

原因和解决方案:

问题源于传递指针的副本而不是对其的引用。要纠正此问题,您可以利用以下技术:

  1. 指针到指针:
    将指针传递给指针,这允许您修改原始值指针:

    void foo(int **ptr) //pointer to pointer
    {
        *ptr = new int[10]; //just for example, use RAII in a real world
    }
  2. 参考指针:
    传递对指针的引用,这会直接修改原始指针:

    void bar(int *&ptr) //reference to pointer (a bit confusing look)
    {
        ptr = new int[10];
    }

通过实现任一方法,都可以有效地修改指针中的指针调用作用域,确保函数内所做的更改反映在外部。

以上是如何修改传递给 C 函数的指针并在调用范围中反映这些更改?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn