2014-04-28 57 views
1

我有一些推式和彈出式代碼,我試圖理解,並有一個關於彈出功能的問題。流行功能解釋

這是節點結構:

struct NODE 
{ 
    int dataitem; 
    struct NODE *link; 
}; 

這是流行音樂功能:

struct NODE* PopD(struct NODE *SP, int *Data) 
{ 
    struct NODE *temp; 

    temp = SP; 
    *Data = temp->dataitem; 
    temp = temp->link; 
    free(SP); 

    return temp; 
} 

所以我的問題是什麼呢這行做:*Data = temp->dataitem;

它爲什麼會走dataitem值變成Data當它不在以後的方法中使用?

+2

它將鏈表頂節點數據值複製到'Data'指針參數中保存的地址。作爲獎勵,當您傳遞空列表(即SP中的NULL值)或空數據目標(Data中的NULL值)時,它也會調用未定義的行爲。看看你能否發現[區別](http://pastebin.com/yP54U5cg) – WhozCraig

+0

@WhozCraig - 嘿,好! –

回答

1

的數據經由Data參數中返回。返回值用於更新堆棧指針。代碼大概是這樣使用的:

struct NODE *stack = NULL; 

// push some items 
// ... 

// pop one 
int data; 
stack = PopD(stack, &data); 
printf("%d\n", data); 
0

當您彈出堆棧的頂部項目時,包含在堆棧頂部的值將通過輸出參數返回。

它可能對調用函數有用。

1

調用此函數的人將傳遞一個指向整數的指針 - 期望該整數將填充堆棧中最頂端的整數。

int x; 
stack = PopD(stack, &x); 
printf("Top of stack was %d\n", x);