掌握 typedef 用法,看这一篇就够了!

其实在正儿八经学C语言的时候typedef用的不是很多,记得书上对它的介绍只是一笔带过。的确它的用法是很简单,但这不代表在使用的过程中不会出错,今天来个彻底的总结。

作用:用来建立新的数据类型名。(注意:这里是新的数据类型名,而不是新的数据类型)。

基本用法:

1)

typedef int Size;

将Size定义为与int具有相同意义的名字。类型Size可以用于类型声明,类型转换等,它和 int 完全相同,如:

Size size;
Size maxSize;
Size *sp;

2)

typedef char *String;

将String定义为与Char*同义,此后,则可以在类型声明和类型转换中使用String

String p;  //p为指向char类型的指针
String arr[MAXLEN]; // arr为元素类型为指向char类型指针的数组

以上两种情况,很好理解,一般都不会出问题,容易出错的是下面这种情况:

3)

typedef int *pt;

const pt ivar1;
pt const ivar2;

那么 ivar1 和 ivar2 的类型是什么呢?

也许有些童鞋会说 ivar1 是指向 int 常量的指针,而 ivar2 是指向 int 类型的const指针。

其实在这里 ivar1 和 ivar2 的类型是相同的,都是指向 int 类型的const指针。

之所以会把 ivar1 的类型搞错,是因为我们将 typedef 当做文本扩展了。

即把 ivar1的声明当成如下形式了:

const int * ivar1;

我们应该将 (int *) 作为一个整体来看待,则不论const 在 pt 前面 还是 pt 后面 ,const 修饰的是 pt 的类型。和如下的定义是一个道理:

const int i;
int const i;

即,不论const 在 int 前面还是后面它修饰的是 int 类型。当我们把上面例子中的 int * 看做一个 整体(int *) 时,道理是一样的。

注:3)中的类比只是用来帮助我们理解,并不完全准确!

使用typedef 的目的 or 好处:

1) 为了使表达式更加简洁:

   函数指针类型通常相当的冗长,可以用typedef 大大的简化。

  typedef int (*cmpFcn)(const char *, const char *);

该定义表示cmpFcn是一种指向函数的指针类型的名字。要使用这种指针类型时只需直接使用cmpFcn即可,不必每次把整个声明都写出来。

2) 为了隐藏特定类型的实现,强调类型的使用目的。

3) 允许一种类型用于多个目的,同时使得每次使用给类型的目的明确。

 

 

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值