typedef结构清晰度

时间:2011-04-05 13:12:42

标签: c linked-list typedef

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

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

typedef struct stackNode StackNode;
typedef StackNode *StackNodePtr;

typedef struct stackNode StackNode;struct stackNode StackNode相同 和typedef StackNode *StackNodePtr;struck stackNode *StackNodePtr ??

相同

6 个答案:

答案 0 :(得分:7)

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

而不是:

StackNode sn;

你会使用:

struct stackNode sn;

而不是:

StackNodePtr snp;

你会使用:

struct stackNode *snp;

声明完全相同。

答案 1 :(得分:7)

更常见的写作方式是:

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

} StackNode_t;

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

答案 2 :(得分:2)

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的相同名称。此外,我在 之前输入 结构 它作为定义存在。尽管如此,我发现我可以通过微软的C到今天的许多版本和Borland C(当时的方式)来做到这一点。

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

答案 3 :(得分:1)

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

那么什么不清楚?

答案 4 :(得分:1)

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

使用typedef的主要原因是

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

答案 5 :(得分:0)

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