首頁 >後端開發 >C++ >如何修改傳遞給 C 函數的指標並在呼叫範圍中反映這些變更?

如何修改傳遞給 C 函數的指標並在呼叫範圍中反映這些變更?

Barbara Streisand
Barbara Streisand原創
2024-12-26 10:15:16438瀏覽

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