在C中创建堆栈,节点的结构

时间:2013-05-09 01:12:17

标签: c struct stack typedef nodes

我已经获得了构成我的堆栈的节点的结构,但我无法理解它。

    struct stackNode 
{
  char data;
  struct stackNode *nextPtr;
};

typedef struct stackNode StackNode; 
typedef StackNode *StackNodePtr;

据我所知,我有一个名为stackNode的结构,重命名为StackNode(或第二种类型除了名字之外的所有内容?),它有两种类型,一个char和一个指向stackNode的指针。

我不确定最后一行是什么意思,任何人都可以介入并向我解释一下吗?我认为这意味着有一个新类型,它是一个指向StackNode的指针,称为StackNodePtr。这是对的吗?

2 个答案:

答案 0 :(得分:4)

是的,每当您使用StackNodePtr时,您实际上使用的StackNode*又等于struct stackNode*。间距和星号放置显然会导致一些混乱。我会亲自将其写为typedef StackNode* StackNodePtr;,以便更清楚地知道什么是typedef ed。

这三行是​​平等的:

StackNodePtr myPointer;
StackNode *myPointer; 
struct stackNode *myPointer;

typedef struct stackNode StackNode的原因通常是避免在使用时编写struct

答案 1 :(得分:2)

你有三件事。

  1. 您声明了一个名为struct stackNode的类型,并提供了结构定义。
  2. 您正在定义一种新类型StackNode,它是struct stackNode的别名(并且与其类型兼容)。
  3. 您正在定义一种新类型StackNodePtr,它是StackNode *(和struct stackNode *)的别名(并且,再次与其类型兼容)。
  4. 这样做,而不是将您的节点变量声明为struct stackNode newNode,而您的列表标题为struct stackNode *head,您将节点变量声明为StackNode newNode,列表标题为{{{ 1}}。

    这是一个相当普遍的习惯用语,尽管有些人建议不要这样做。 (当然,其他人也坚持认为这也是正确的方法。)