C 中函數不會改變傳遞的指標
在 C 中,當嘗試修改傳遞給函數的指標時會出現混亂。問題在於指針的固有性質。當函數接收指標作為參數時,它實際上是在該指標的副本上進行操作,而不是原始指標本身。
考慮範例函數 clickOnBubble:
bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble *targetBubble) { // ... your code }
當您傳遞一個指標作為參數,該函數在其本地範圍內建立該指標的新副本。對指標本機副本所做的任何修改都不會影響函數外部的原始指標。在上面的情境中,程式碼嘗試將 targetBubble 指派給函數內 bubbles 向量的元素,但此指派僅修改 targetBubble 的本機副本。
要有效修改函數外部的指針,可以使用指向指針的指針或指針的引用。這允許函數存取和修改原始指標。
使用指向指標的指標:
void foo(int **ptr) { *ptr = new int[10]; // Assign memory to the pointed-to location }
在此範例中,函數 foo 接受一個指標以指標作為其參數。現在它可以修改指標本身,為其指派一個新值。
使用對指標的引用:
void bar(int *&ptr) { ptr = new int[10]; // Assign memory to the pointed-to location }
這裡,函數列接受一個對指標的引用。它可以直接存取和修改原始指標。
以上是為什麼修改 C 函數中的指標不會改變原始指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!