对C中typedef的使用和理解

typedef声明为已存在的数据类型取一个别名,可以用于替换复杂的类型名。

typedef是存储类型说明符(typedef、auto、register、static、extern、_Thread_local),由于声明中只允许一个存储类型说明符,因此typedef不能和他的存储类型说明符一起使用

使用代码示例说明

// 为整型定义一个别名int32
typedef int int32;

// 为 int* 指针定义一个别名
typedef int* int_ptr;

// 1.为 char 定义一个类型别名 char_t
// 2.为 char* 定义一个类型别名 char_p(char类型指针)
// 3.为 char (*)(void) 定义一个类型别名 fptr(函数指针)
typedef char char_t, *char_p, (*fptr)(void);

// 定义可变长度数组
typedef int A[];
// 使用时确定具体长度,a的类型是int[2], b的类型是 int[3]
A a = {1, 2}, b = {3,4,5};

// 为 int[5] 定义一个别名为arr
typedef int arr[5];

// 为结构体取别名
// 1.为 _node 定义一个别名 Node
// 2.为 _node* 定义一个别名 P_Node (指针)
typedef struct _node
{
   void* data;
   struct _node *pNext;  // 结构体自引用
} Node, *P_Node;

// 为 tageNode* 定义一个别名 pNode
typedef struct tagNode *pNode;
struct tageNode
{
    char *pItem;
    pNode pNext; // 结构体自引用
};

注意:结构体的自引用只能通过指针来引用。

通过上面的代码和说明可以看出:把typedef和别名去掉后,剩余部分就是别名代表的数据类型