不确定为什么在设置struct标签时使用typedef

时间:2017-11-14 18:07:17

标签: c struct

考虑以下代码:

struct TreeNode {
  int key;
  struct TreeNode *left;  
  struct TreeNode *right;
};


struct ListNode {
  int key;
  struct ListNode *next;
};

我将其理解为具有单个struct标签的两个结构。宣言(如果我理解正确的话):

struct ListNode *next; 

创建指向ListNode类型结构的指针。那个

struct ListNode node1;

正在创建ListNode类型的结构。 但是,我不明白以下两行:

typedef struct TreeNode *TreeNodePtr;
typedef struct ListNode *ListNodePtr;

如果这是创建一个指向TreeNode / ListNode类型的struct节点的指针,我在这种情况下不理解typedef的用途。

2 个答案:

答案 0 :(得分:3)

typedef struct TreeNode *TreeNodePtr;

允许您输入

TreeNodePtr p;

而不是

struct TreeNode *p;

注意:人们通常会这样做

typedef struct TreeNode TreeNode;

这允许

TreeNode tn;

这也可以在结构定义本身中完成(结构标记,但是例子没有它)

struct TreeNode {
  int key;
  struct TreeNode *left;  
  struct TreeNode *right;
} TreeNode;

另请注意 - 在c ++中这不是必需的,c ++中的结构(或类)始终是其自己的标记'

答案 1 :(得分:0)

此上下文中的typedef用于指针(以便您可以编写TreeNodePtr并使用指针类型而不是struct TreeNode *)。这种定义在Windows头文件中很常见:

typedef struct _WINUSB_SETUP_PACKET {
UCHAR   RequestType;
UCHAR   Request;
USHORT  Value;
USHORT  Index;
USHORT  Length;
} WINUSB_SETUP_PACKET, *PWINUSB_SETUP_PACKET;