2013-08-17 99 views
0

我最近遇到這個問題。提領一個結構指針

單鏈表的創建,對列表中的節點看起來像

struct node 
{ 
    int data; 
    struct node* link; 
}; 

創建使用列表中添加的頭,列表看起來像

100-> 200-> 300

顯示功能被寫成

void display(struct node* head) 
{ 
    while(head != NULL) 
    { 
     printf ("%d", *head); 
     head=head->next; 
    } 
} 

這是ACC的法律途徑在列表中查看數據?我將它與GCC編譯器綁定在一起,它發出了警告,但它工作正常。會在某些情況下導致錯誤嗎?

+1

什麼是警告? (要清楚的是,答案突出顯示了問題所在,但警告應該包括在這個問題中,這個警告可能會幫助未來的用戶找到問題和答案,一旦它被添加到問題中,可能會變得很明顯:關於數據結構和(單獨)鏈表的標籤對於這個問題可能並不那麼重要。) –

回答

5
printf ("%d", *head); 

應該

printf ("%d", head->data); 

那麼編譯器警告應該消失。您的代碼偶然工作 (或者意外,因爲@alk評論) 因爲data是 第一個成員struct node。這可能取決於如何將結構參數 傳遞給printf函數。無論如何,這是錯誤的。

+3

我最好說'*偶然工作*'... – alk

+0

我通常使用head-> data,這是被問到的在一家公司的招聘過程中,我想知道答案是錯誤還是正確的結果,考慮到這個測試是基於紙質的客觀測試。 – abeer

+1

@ user1276290:這取決於平臺上使用的「調​​用約定」。如果'* head'後面跟着更多的printf參數,它可能也會失敗。無論如何,這是使用未定義行爲的錯誤代碼。 –