typedef的用法

typedef是一种给已有的数据类型以别名来简化定义的方法,简单记录一下自己的学习心得。

typedef int YourDefInt;

YourDefInt a;

上面就是定义的一个int,效果等同于下面的这个:

int a;

看起来好像还变麻烦了,实则——

好吧确实是变麻烦了,int三个字母变成YourDefInt是个字母可不是变麻烦了吗。

那为什么我们还需要这个呢?我们来一个复杂的定义:

int add(int a, int b)
{
    return a + b;
}

int (*FuncPtr)(int, int);
FuncPtr = add;

print("%d", FuncPtr(3,5));

我们发现这里有个嗨长的定义,就是函数指针FuncPtr的定义。

ok我们如果要定义很多个这种玩意,我这种懒比肯定是不想全部手打的啊,回去找到这行代码复制粘贴一遍麻烦程度更是不如手打。

这个时候,typedef就排上用场了,他是干什么的来着?

对!给已有的数据类型以别名,可以简单而抽象地理解成定义定义或者定义声明,我们可以像下面这样写:

int add(int a, int b)
{
    return a + b;
}

typedef int (*Funcdef)(int, int);
Funcdef FuncPtr;
FuncPtr = add;

print("%d", FuncPtr(3,5));

好像还是麻烦了,别着急,我们如果要定义很多个这种变量呢?

typedef char CDef[99];

CDef c1;
CDef c2;
...
CDef c99;

当然只是举个例子,但是在这个例子里你会发现,定义确实会简化一些。


说了这么多,怎么用这玩意呢?

假设我们有一个定义:

double x;

 然后在前面加上typedef

typedef double x;

其实这个时候就已经对了,我们将x变为了double这个数据类型的别名。当然,这不太符合工程规范,我们改一下名字会比较好。

typedef double typedou;
typedou x;

这样才算是一个完整的定义过程,简单来说用法如下:

typedef %数据类型% %你希望的该类型的别名%;
%你希望的该类型的别名% %变量名%;

令人惊喜的是,由于typedef是给已有的数据类型一个别名,我们需要改动用它来定义的变量类型时,我们仅需要改动typedef语句就可以了,例如:

typedef char CDef[99];

CDef c1;
CDef c2;
...
CDef c99;

改为:

typedef char CDef[80][80];

CDef c1;
CDef c2;
...
CDef c99;

将上面的改成下面的仅需要改动一行,多么优雅的维护方式。


不过值得一提的是,它仅在定义域内生效,比如:

class MyClass {
public:
    typedef int ClassInt;
    ClassInt a; // 有效
};

MyClass::ClassInt c = 30; // 有效,因为使用了类的作用域
ClassInt d = 40; // 错误,ClassInt 在这里不可用

和函数,变量等一样,或许可以理解为一个存储数据类型的变量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值