首頁 > 後端開發 > C++ > 為什麼修改 C 函數中的指標不會改變原始指標?

為什麼修改 C 函數中的指標不會改變原始指標?

Linda Hamilton
發布: 2024-12-27 07:17:09
原創
262 人瀏覽過

Why Doesn't Modifying a Pointer in a C   Function Change the Original Pointer?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板