我在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的指针。
答案 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); 返回可退货;