我对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
??
答案 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的主要原因是
答案 5 :(得分:0)
查看typedef
是否有帮助。更像是101.标记为“使用问题”的部分可能会对您的问题提供一些见解。