2011-05-28 63 views
0

我在C編程。 考慮下面的代碼。在使用C中的結構和指針時遇到問題

我的結構定義爲:

// Define the stack 
struct stackNode { 
char data; 
struct stackNode *nextPtr; 
}; 
typedef struct stackNode StackNode; 
typedef StackNode *StackNodePtr; 

以下變量用於:

StackNode topTracker; // The pointer of this stackNode will always point to the top of the stack 

,我試圖完成以下功能。

char pop(StackNodePtr *topPtr){ 
    char returnable; 
// store the Node.data from the top of the stack 
    returnable = *topPtr.data; //[1] 
// Set the next Node to the top of the stack 
    topTracker.nextPtr = *topPtr.nextPtr; //[2] 
// return the Node data. 
    return returnable; 

問題是我收到以下錯誤:在點[1] & [2]分別

「在一些成員data' in something not a structure or union" "request for member nextPtr的要求不是一個結構或聯合」

如何我是否可以解決這個錯誤,並實際訪問指針* topPtr的數據和nextPtr?假設* topPtr在運行時將是一個指向實際StackNode的指針。

回答

3

topPtrStackNodePtr*的類型,它是StackNode**的別名。這意味着*topPtrStackNode*類型的指針類型,您必須使用->訪問成員。

另外要注意的是,運營商.->綁定比一元*強。因此,你必須使用括號來操縱評估順序:

returnable = (*topPtr)->data; 

returnable = (**topPtr).data; 
+0

returnable =(* topPtr) - > data; 這就是那個。在整個堆棧中應用該邏輯,現在它正常工作。謝謝。奧斯瓦爾德。 – Baez 2011-05-28 10:24:12

-2

ü[R使用錯誤的語法它shud是topPtr->數據。 另外,如果你需要學習,現在瞭解內存泄漏。 它是在你的上面的程序。 所以,只要你檢索我們的數據免費的內存 例如。 returnable = topPtr-> data; StackNodePtr * tmp = topPtr; topTracker-> nextPtr = topPtr-> nextPtr; free(tmp); 退貨退貨;

+0

感謝Nik,今天這是一個急於求成的項目 - 而我對C的瞭解有限。 在我深入研究C之前,我將學習如何管理我的記憶和垃圾,但現在它會做。 :) 謝謝。 – Baez 2011-05-28 10:23:22

1

*topPtr給出StackNodePtr。它仍然離結構還有一層。 您需要再次取消引用它才能獲得StackNode。
(**topPtr)將給出StackNode。

使用(**topPtr).data(*Ptr)->data找到結構成員。

+0

乾杯阿爾文,與奧斯瓦爾德答案類似的答覆,並將標記爲正確的也。 – Baez 2011-05-28 10:24:43