在C中使用结构和指针时遇到问题

时间:2011-05-28 10:06:02

标签: c pointers struct

我在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;

问题是我收到以下错误:在Point [1]& [2]分别为

“请求成员data' in something not a structure or union" "request for member nextPtr',而不是结构或联合”

如何解决此错误并实际访问指针* topPtr的数据和nextPtr?鉴于* topPtr将是在运行时指向实际StackNode的指针。

3 个答案:

答案 0 :(得分:3)

topPtr的类型为StackNodePtr*,是StackNode**的别名。这意味着*topPtr的类型为StackNode*,这是一种指针类型,您必须使用->访问成员。

还要注意,运算符.->绑定比一元*强。因此,您必须使用括号来操纵评估顺序:

returnable = (*topPtr)->data;

returnable = (**topPtr).data;

答案 1 :(得分:1)

*topPtr提供StackNodePtr。 距离结构还有一层。 你需要再次取消引用才能得到StackNode (**topPtr)将提供StackNode。

使用(**topPtr).data(*Ptr)->data转到结构成员。

答案 2 :(得分:-2)

使用错误的语法,它应该是topPtr->数据。 此外,如果你需要学习,现在学习内存泄漏。 它在你的上面的程序。 所以一旦你检索你的数据释放内存 例如。 returnable = topPtr-> data; StackNodePtr * tmp = topPtr; topTracker-> nextPtr = topPtr-> nextPtr; 自由(TMP); 返回可退货;