C/C++中 typedef 的深入理解

江枫思渺然 提交于 2019-12-27 02:57:42

大二的时候学数据结构总是用到typedef这个关键字,似乎都很熟练,但是,真的就理解了typedef真正的含义了吗

C++/C是真的博大精深!!!!!!

先把typedef的用法都列出来,看看我们是不是都理解:

typedef int BOOL;          //就是简单的将int类型去一个别名BOOL

//然后我们可以用BOOL来定义一个整型变量:BOOL  a = 13;

typedef long double REAL;   //定义了一个长整型,双精度的类型的别名REAL

//这其实最高精度的类型了,但是有的平台不支持long,甚至不支持double,这时候可以用float替代

当我们定义结构体的时候:

struct xx
{
    int x;
    int y;
    int z;
};

当我们调用这个结构体的时候:

struct  xx x1={123,456,789};

struct xx x2;

会不会感觉少了那么点感觉,因为这里struct xx才是一种类型,类似于struct xx等于int

然后我们再来看这样的定义:

typedef struct xx
{
    int x;
    int y;
    int z;
}xxx;

调用的时候:

xxx x1={123,456,789};

xxx x2;

就像定义整型变量一样方便

这里的意思就是将stuct xx这个类型定义了一个别名叫做xxx

你以为你懂了?再来点料!!!

typedef struct xx
{
    char * item;
    xxxx next;
}*xxxx;

这里会出现一个错误,因为*xxxx都还没有定义,在结构体里面就开始用了,这怎么行呢

所以我们要这么来:

typedef struct xx
{
    char *item;
    struct xx *next;
}*xxxx;

现在是不是有一种恍然大悟的感觉,感觉得到了升华?

别急,还没完!!!

还有数组,还有指针

数组:定义:typedef int array_100[100];//这里有个细节大家要懂,数组名其实就是数组指针,这里的array_100是指向元素个数为100个的数组指针,所以我们可以用array_100来定义各个一百个元素长度的数组

其实就等价于typedef int (*arrar_100) [100];

调用:array_100   arr;

指针:定义:typedef char * pchar;

调用:pchar  pa;

还有函数,别忘了函数指针啊!!//这个可就多了去了

平时定义一个函数数组指针,有没有晕?

int *(*a[13])(int ,char );

我们可以用typedef这样来定义其别名:

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

调用呢:fun a[13];就行了

//解释一下:13个元素每个元素都是一个函数指针,近似于函数的首地址

还有更难的:

typedef char * pchar;

int strcmp(const pchar,const pchar)是否等价于const char *?

肯定不是啊,他这里是等价于char  * const ,又不是简单的字符串替换(宏定义才是这样的功能)

在上面可以看出我们的本意是定义在strcmp中用两个常量指针,但是实际上这里会把它当成指针常量来处理了,因为pchar就是一个指向char类型的指针啊。所以加了个const就把它变成指针常量了。这要与平时我们定义指针常量和常量指针要区分开来

但是我们可以这样:

typedef const char * pchar;

int strcmp(pchar,pchar);

//这里就不细讲了,大家有疑问的私信我或者评论都行

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!