typedef结构清晰度

我对typedef感到困惑,任何人都可以将其转录为正常的构图吗? 结构? 我真的不想处理typedef因为它让我感到困惑

struct stackNode { int data; struct stackNode *nxtptr; }; typedef struct stackNode StackNode; typedef StackNode *StackNodePtr; 

typedef struct stackNode StackNode;struct stackNode StackNodetypedef StackNode *StackNodePtr; 与被struck stackNode *StackNodePtr相同?

如果您不想使用typedef ,则可以始终使用完整类型名称:

代替:

 StackNode sn; 

你会用:

 struct stackNode sn; 

代替:

 StackNodePtr snp; 

你会用:

 struct stackNode *snp; 

声明完全相同。

编写相同内容的更常见方法是:

 typedef struct stackNode { int data; struct stackNode *nxtptr; } StackNode_t; 

其中stackNode是所谓的“struct tag”, StackNode_t是该类型的实际名称。 如果你声明这样的结构,程序的其余部分将不需要关注struct标记,你可以使用nxtptr,就像它是StackNode_t一样。

 typedef struct stackNode { int data; struct stackNode *nxtptr; } StackNode_t; 

如果你不想在struct中包含“struct stackNode”,我发现我能够这样做:

 typedef struct STACKNODE STACKNODE; typedef struct STACKNODE { int data; STACKNODE *nxtptr; }; 

你可以编写这样的东西,并且它编译得很好,并且它运行得很好可能看起来反直觉。 它可以反直觉,因为我使用struct STACKNODE和typedef STACKNODE的相同名称。 而且,我在结构存在之前 输入结构作为定义。 尽管如此,我发现我可以通过Microsoft的C到今天的许多版本和Borland C(当时的方式)来做到这一点。

我喜欢它,因为如果我已经要输入structdef结构,我不喜欢在结构定义中使用“struct STACKNODE * nxtptr”(即使用单词“struct”)。

使用typedef,您可以将StackNode定义为struct stackNode ,将指针StackNodePtr定义StackNode

那有什么不清楚的?

好吧,轻松解释一下:Typedef基本上没有别的告诉编译器你创建了一个新类型的变量(比如int,char等)。

使用typedef的主要原因是

  • 助记名称。 这通常也用在库函数中。 而不是使用像int或long这样的标准类型,您只需将其键入undede为size_t即可。 所以这个变量用于什么更清楚。
  • 缩短名称。 通常用于结构之类的东西(这将是你的情况)。 为了避免总是必须键入struct myStruct varname,您可以轻松地使用typedef来摆脱前面的结构。

看看typedef帮助。 更像是101.标记为“使用问题”的部分可能会对您的问题提供一些见解。