函數行為:在 C 中傳遞指標
在 C 中,將指標傳遞給函數允許修改呼叫範圍中的原始變數。但是,在處理指標時,可能會出現某些細微差別。
問題:
考慮一個修改傳遞指標的函數,如下例所示:
bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *> bubbles, Bubble *targetBubble) { targetBubble = bubbles[i]; }
儘管修改了函數內的“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]; }
透過實現任一方法,都可以有效地修改指標中的指標呼叫作用域,確保函數內所做的變更反映在外部。
以上是如何修改傳遞給 C 函數的指標並在呼叫範圍中反映這些變更?的詳細內容。更多資訊請關注PHP中文網其他相關文章!