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
相同?
如果您不想使用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.标记为“使用问题”的部分可能会对您的问题提供一些见解。