typedef 用法

typedef是c语言中给类型赋别名的工具。且不同于#define的宏义,在预编译时工作。typedef在运行时工作。

typedef不能与auto、extern、mutable、static、register等关键字出现在同一个表达式中。

它有如下优点与用法:

1.按功用设计,方便理解代码。

typdef int size;  // 定义
size getSize();   // 使用
2.简化代码,隐藏数组、指针和模板类

typdef char str[300];  // 定义
str s;                 // 等价于 char str[300];

typedef char* ptr;     // 定义
ptr a;                 // 等于 char* a;
 
typedef std::vector<int> array;  //定义
array a;                         // 等价于std::vector<int>
 
3.平台无关数据类型

 这个也是最常用的,比如整型在各个平台上长度可能不一样,使用typedef 可以以统一的名称使用相同的整型类型。
 否则,平台A使用INT32表示32位整型,平台B使用__INT表示32位整型。这时分别使用

typdef INT32 int;
typdef __INT int;
就可以以统一的int在这两个平台上使用32位整型数据。

4.函数指针
 这个功能非常有用。
 普通函数
int func(int a)	{return a;}
typedef int (*F)(int);
F f = func;
(*f)(2);


 类成员函数
class A
{
	public:
	int func(int a){return a;}
};

typedef int (A::*CF)(int);

CF cf = &A::func;
A a;
(a.*cf)(2);
A* a2 = &a;
(a2->*cf)(2);
指针函数在循环场景中需要确定调用函数时很有用,类似于:
int funcA(){...}
int funcB(){...}

bool flag = true;
for(int i=0; i<n; ++i)
{
    if(flag)
        funcA();
    else
        funcB();
}
这种情况下使用函数指针非常方便。
int funcA(){...}
int funcB(){...}

typdef int(*F)();

bool flag = true;
F f;
if(flag)  f = funcA;
else      f = funcB;
for(int i=0; i<n; ++i)
{
    f();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值