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

本文详细探讨了C/C++中的typedef关键字,包括如何为基本类型、结构体、数组、指针和函数指针创建别名。通过实例分析了typedef在数组和指针定义中的特殊用法,强调了typedef与宏定义的区别,并提到了const修饰符在typedef中的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大二的时候学数据结构总是用到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);

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值