C语言 - typedef的使用

C语言允许为一个数据类型起一个新的别名,就像给人起“绰号”一样。

为结构体、共用体起别名:(替换结构体最常用)

1
2
3
4
5
typedef struct animal {
char* name;
int legs;
int speed;
} Animal;

使用 typedef 命令,为 struct animal 起了一个别名 Animal 。同样关于结构体的几种定义方式也都可以使用。

1
2
3
4
5
typedef union {//匿名共用体
short count;
float weight;
float volume;
} quantity;

typedef 命令可以为 union 数据类型起别名。

为某个基本类型起别名:(其次)

1
typedef 类型名 别名;

习惯上,常把用typedef声明的类型名的第1个字母用大写表示,以便与系统提供的标准类型标识符相区别。

举例:

1
2
3
4
typedef int Integer;  //用Integer作为int类型别名,作用与int相同
Integer a, b;
a = 1;
b = 2;

Integer a, b;等同于int a, b;

为指针起别名:

1
2
3
typedef int* intptr;
int a = 10;
intptr x = &a;

intptr 是 int* 的别名。不过,使用的时候要小心,这样不容易看出来,变量 x 是一个指针类型。

为数组起别名:

1
2
3
4
5
6
7
//举例1
typedef int five_ints[5];
five_ints x = {11, 22, 33, 44, 55};

//举例2
typedef int Num[100]; //声明Num为整型数组类型名
Num a; //定义a为整型数组名,它有100个元素
  • 上例中, five_ints 是一个数组类型。我们把原有的int [5]看做是数组的类型。
  • 举例:指针数组
1
typedef int *PTR_TO_ARR[4];
  • 表示 PTR_TO_ARR 是类型int * [4]的别名,它是一个二维数组指针类型。接着可以使用 PTR_TO_ARR 定义二维数组指针:
1
PTR_TO_ARR p1, p2;

为函数起别名:

  1. typedef 为函数起别名的写法如下:
1
typedef signed char (*fp)(void);
  • 类型别名 fp 是一个指针,代表函数 signed char (*)(void) 。
  • 举例:
1
2
typedef int (*PTR_TO_FUNC)(int, int);//PTR_TO_FUNC代表函数int (*)(int int)
PTR_TO_FUNC pfunc;//等价于int (*pfunc)(int int);函数指针

参考链接: