typedef的用法

在c和c++编程语言中,typedef是一个关键字。它用来对一个数据类型取一个别名,目的是为了是源代码更易于阅读和理解。
它通常用于简化声明复杂的类型组成的结构
例如:创建Length作为int的别名:

typedef int Length;

创建PFI作为一个指向“一个拥有两个char*当作参数并回传int的函数”的指针的别名

typedef int (*PFI)(char*, char*); 

另一个例子:

int coxes;
int jaffa;
//...
//coxes++;
//...
if (jaffa == 10)
//...

现在来看以下代码

typedef int Apple;
typedef int Orange;
Apple coxes; 一个变量包含关于苹果的信息
Orange jaffa;  一个包含关于橘子的信息
//...
//coxes++;
//...
if (jaffa == 10)
//...

第二个例子用了typedef,使其更易于理解将要进行什么。也就是一个变量包含关于苹果的信息,而另一个包含关于橘子的信息。

简化声明语法

struct var{
	int data1;
	char data2;
}; 

定义了一个数据类型var

c++
声明一个var类型的变量,如 struct var a;
注意,在c++中声明一个struct时,同时也隐含了typedef,C则没有。

c
而c必须要:typedef struct var newtype;
现在要创建类型var的变量时,代码可以写为: newtype a;
这样就更容易阅读了,因为不用再为每一个var类型的变量加上关键字struct

与数组一起使用

typedef char array_t[6];  // char[6]类型的变量,别名为array_t
array_t  ary = {0,1,2,3,4,5}; //<=> char ary[6] = {0,1,2,3,4,5}

数组指针

array_t *pArr; <=> char (*pArr)[6]  //表示pArr是一个指向了存储char[6]类型存储器的指针 
//在这里,array_t是一个char[6]的别称 

与指针一起使用

typedef int *intptr;
intptr numr,id; 

与结构指针一起使用

struct var{
	int data1;
	char data2;
}; 
typedef struct var per;
per *ptr_1
//<=>  typedef定义了一个var*类型,apoint_var是一个指向“一个var类型”的指针 
typedef struct var* apoint_var;
apoint_var var_apoint1, var_apoint2, var_apoint3;

与函数指针一起使用

int do_math(float arg1, int arg2) {
    return arg2;
}

int call_a_func(int (*call_this)(float, int)) {
    int output = call_this(5.5, 7);
    return output;
}

int final_result = call_a_func(&do_math)

使用typedef定义

typedef int (*MathFunc)(float, int);

int do_math(float arg1, int arg2) {
    return arg2;
}

int call_a_func(MathFunc call_this) {
    int output = call_this(5.5, 7);
    return output;
}

int final_result = call_a_func(&do_math);

用来类型转换
typedef同时可以用来类型转换 ,例如:

typedef int (*funcptr)(double);  

funcptr指向一个“以一个double类型参数并返回int型的(类型转换)函数”的指针
左侧,funcptr用来声明变量;右侧,funcptr则用来转换值的类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值