LV010-typedef简介
一、什么是 typedef ?
typedef 为 C 语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型( int , char 等)和自定义的数据类型(struct )。
就相当于自己的名字和小名,通过 typedef 为自己的名字定义一个小名,别人叫自己小名的时候也知道叫的是自己。一般来说这个关键字经常在定义结构体类型时使用,毕竟结构体的名字还是有点长的。
二、怎么使用?
1. 基本格式
基本使用格式如下:
c
typedef 原来数据类型 用户自定义数据类型;【注意】该关键字重新命名数据类型的时候,注意后边加上分号( ; )。
2. 常见用法
2.1 常见类型起别名
c
typedef unsigned long uint32;
uint32 a = 0;
/* 上边两句就等价于 */
unsigned long a = 0;2.2 结构体类型起别名
一般来说,该关键字多会用在结构体中,例如,
c
typedef struct _node_
{
int data;
struct _node_ *next;
} listnode, *linklist;这里定义了两个新的数据类型 listnode 和 linklist 。其中 listnode 等价于数据类型 struct _node_ ,而 linklist 等价于 struct _node_ * 。
2.3 数组类型起别名
c
typedef char ARRAY_20[20];它表示 ARRAY_20 是与类型 char [20] 等价。它是一个长度为 20 的数组类型。接着可以用 ARRAY_20 定义数组,例如
c
ARRAY_20 a1, a2;
/* 等价于 */
char a1[20], a2[20];2.4 数组指针类型起别名
c
typedef int (*PTR_TO_ARR)[4];这里定义了一个新的数据类型 PTR_TO_ARR ,它等价于类型 int * [4] ,它是一个二维数组指针类型。接着可以使用 PTR_TO_ARR 定义二维数组指针,例如
c
PTR_TO_ARR a1, a2;下面是一个实例:
c
#include <stdio.h>
typedef char (*PTR_TO_ARR)[30];
char str[3][30] =
{
"fanhua_0",
"fanhua_1",
"fanhua_2",
};
int main()
{
PTR_TO_ARR parr = str;
int i;
for(i=0; i<3; i++)
{
printf("str[%d]: %s\n", i, *(parr+i));
}
return 0;
}在终端执行以下命令编译程序:
shell
gcc test.c -Wall # 生成可执行文件 a.out
./a.out # 执行可执行程序然后,终端会有以下信息显示:
shell
str[0]: fanhua_0
str[1]: fanhua_1
str[2]: fanhua_22.5 函数指针起别名
c
typedef int (*PTR_TO_FUNC)(int, int);
PTR_TO_FUNC pfunc;这里定义了一个新的类型 PTR_TO_FUNC ,也就是函数指针类型。
c
#include <stdio.h>
typedef int (*PTR_TO_FUNC)(int, int);
int max(int a, int b)
{
return a>b ? a : b;
}
int main()
{
PTR_TO_FUNC pfunc = max;
printf("max: %d\n", (*pfunc)(5, 6));
return 0;
}在终端执行以下命令编译程序:
shell
gcc test.c -Wall # 生成可执行文件 a.out
./a.out # 执行可执行程序然后,终端会有以下信息显示:
shell
max: 6