2013-10-19 71 views
1

我在一個函數中有一個指針,我想返回那個指針,以便我可以修改它指向以後的內容。將返回它返回指針指向的地址或指針本身?這個問題是因爲我想改變鏈表的頭部所指向的內容。返回一個指針並修改那個指針指向的內容

因此,例如

struct node_{ 
    //variables 
}*headPtr=NULL; //assume when we are returning headPtr in foo() it is no longer NULL but points to something 

typdef struct node_ node; 

node foo(){ 
    //some if conditions 
    return headPtr; 
} 

main(){ 
    node *tmpPtr; 
    tmpPtr=foo(); 
} 
+0

你有什麼'/如果條件'?我猜你需要使用'malloc()' – jev

回答

0

這個函數的指針鏈表的頭,其他的一些參數,創建一個新的節點列表追加到它,並返回德新頭。

struct type *ptr_change_head(struct type *ptr_old_head, other args){ 
    struct type *ptr = ptr_old_head; 
    struct type *ptr_new_head = <new head>; 

    ptr_new_head->ptr_next = ptr; 

    return ptr_new_head; 

} 
+0

我建議不要使用新指針返回值,因爲將錯誤條件傳遞給*調用者*的行爲受到嚴重限制(並且至少有一個洞將始終存在)。例如:假設你在使用'ptr'之前修復了這個代碼來檢查NULL,你可能會返回NULL並且希望調用者保存原來的傳入指針以避免泄漏)。這不幸並不少見,實際上,正因爲這個原因,常用的標準函數('realloc()')經常被錯誤地使用。無論如何,這確實解決了OP的問題。 – WhozCraig

0

首先,讓我們讓你的類型相匹配。 foo()的類型簽名表示它返回一個node,但實際上你試圖返回一個指向node的指針。讓我們重新定義foo()

node *foo() { 
    return headPtr; 
} 

將在返回它返回什麼指針指向的地址或指針本身?

tmpPtr = foo(); 

將放入變量tmpPtr什麼指針指向的地址,tmpPtr將是另一個變量,完全匹配headPtr。也就是說,兩個指向同一事物的單獨指針。有兩個單獨的點使這裏:

  • tmpPtrheadPtr是兩個獨立的變量,如果你重新分配一個它會對其他沒有任何影響。
  • 因爲它們當前指向同一個節點,所以可能會通過取消引用任一指針潛在地變異它們指向的節點,假設它們指向實際節點而不是NULL

如果你的目的是要改變什麼headPtr點,您可以:

  • 變化headPtr直接與像headPtr = something的分配。
  • 設置了指向headPtr的指針,其類型爲node**

您可以將指針設置爲headPtr的東西,如

node **foo() { 
    return &headPtr; 
} 

int main() { 
    node **headPtrPtr = foo(); 
    *headPtrPtr = something else; 
} 

這將指針置於headPtrPtrheadPtr。通過提領headPtrPtr,您可以使headPtr指向新節點。

相關問題