大二的时候学数据结构总是用到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);
//这里就不细讲了,大家有疑问的私信我或者评论都行