考虑以下代码:
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的用途。
答案 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;