自学内容网 自学内容网

C/C++中typedef关键字的用法

typedef关键字主要用于已定义的类型起别名,以提高代码的可读性,常见的用法如下:

1、给已经定义的类型起别名

(1)给基础变量起别名

typedef unsigned char uint8

       等效用法:

unsigned char cnt = 0;
uint8 cnt = 0;

(2)给结构体起别名

struct __Point2D__
{
    int x;
    int y;
}
// 给__Point2D__起别名Point2D
typedef __Point2D__ Point2D
// 在定义类型时直接起别名
struct __Point2D__
{
    int x;
    int y;
}Point2D

       等效用法: 

struct __Point2D__ point2d;
Point2D point2d;

2、定义数组类型(给固定长度的数组类型起别名,不推荐使用,因为定义时无需指定数组长度,影响代码可读性)

(1)定义普通数组类型

         此处以定义长度为6类型为int的数组为例,正常的定义方法如下:

int array6[6];

// 数组元素赋值
array6[3] = 1;

        用typedef定义后如下:

typedef int array6_t[6];

        此时array6_t即可实现不指定长度的情况实现长度为6类型为int的数组的定义,具体如下:

array6_t array6;

// 数组元素赋值
array6[3] = 1;

(2)定义数组指针类型

         此处以定义长度为3类型为int的数组指针为例,正常定义方法如下:

// 定义长度为3的int类型数组指针
int (* pArray3)[3];

// 定义长度为3的int类型数组
int a3[3] = {1, 2, 3};

// 将数组指针指向数组
pArray3 = &a3; 

         用typedef定义后如下: 

typedef int (* pArray3_t)[3];

        此时pArray3_t即可实现不指定长度的情况实现长度为3类型为int的数组指针的定义,具体如下:

pArray3_t pArray3;

// 定义长度为3的int类型数组
int a3[3] = {1, 2, 3};

// 将数组指针指向数组
pArray3 = &a3; 

3、定义函数指针类型(给固定返回值类型与参数类型的函数指针类型起别名,在调用动态库时经常使用,推荐学习掌握

函数指针变量定义示例如下:

int (* pFunc) (int a, int * p);

// 定义函数
int func(int a, int * p)
{
    ...// 函数体实现
}

// 将pFunc函数指针指向func函数
pFunc = func;

以上代码定义了一个函数指针变量pFunc,其可以指向一个返回值类型为int、第一个参数类型为int、第二个参数类型为int指针的函数,该定义比较复杂不方便重复使用,可使用typedef进行函数指针类型重定义,具体如下:

typedef int (* pFunc_t) (int a, int * p);

使用pFunc_t可实现函数指针的多次定义,如:

// 定义函数指针变量
pFunc_t pFunc;

// 将pFunc函数指针变量指向func函数
pFunc = func;

// 定义第二个函数指针变量
pFunc_t pFuncA;

参考博客:typedef的4种常见用法-CSDN博客


原文地址:https://blog.csdn.net/ZXF_H/article/details/140521014

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!