typedef

给一个已经存在的数据类型取一个别名,而非定义一个新的数据类型

基本用法

  1. 为基本数据类型定义新的类型名
typedef unsigned int COUNT;
  1. 为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称
struct tagPoint
{
    double x;
    double y;
    double z;
};
typedef struct tagPoint Point;
// 另一种写法
typedef struct tagNode
{
    char *pItem;
    struct tagNode *pNext;
} *pNode;

typedef struct tagNode *pNode;
struct tagNode
{
    char *pItem;
    pNode pNext;
};
  1. 为数组定义简洁的类型名称
typedef int INT_ARRAY_100[100];
INT_ARRAY_100 arr;
> typedef char * ARRAY[20]数组指针
  1. 为指针定义简洁的名称
typedef char* PCHAR;
PCHAR pa;
  1. 为函数类型定义名称
typedef int (*PTR_FUNC)(int v1, int v2);

注意

  • 连续定义的问题
char * a,b; // a为char *指针类型,b为char类型

typedef char * CHAR_PTR;
CHAR_PTR a,b; // a,b 都是CHAR_PTR类型
  • const 与typedef别名结合
typedef char * PSTR

const PSTR实际上相当于const char吗?不是的,它实际上相当于char const。
原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char* const。
简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。

  • typedef 与 static
    typedef在语法上是一个存储类的关键字(如auto、extern、mutable、static、register等一样),虽然它并不真正影响对象的存储特性,如:
    typedef static int INT2; //不可行
    编译将失败,会提示“指定了一个以上的存储类”。
文档更新时间: 2021-03-09 20:32   作者:周国强