c语言123陷阱数,C语言的陷阱之typedef

本文详细解读了C语言中typedef的关键特性,包括重命名数据类型(如int到MYINT)、结构体与typedef的便捷操作、与宏定义的区别、const与typedef的交互,以及如何简化函数指针和提升代码移植性。通过实例演示了typedef的实际使用和优势。
摘要由CSDN通过智能技术生成

C语言的陷阱之typedef

typedef 是一个关键字,可以重命名一些数据类型也可以重定义一些新的数据类型。我们从以下几个角度去理解 typedef。

1.typedef 和普通数据类型类型typedefintMYINT;

inta=10;

MYINT B=20;

123123

我们给 int 重命名成 MYINT,这时候 int 和 MYINT 是一样的,都可以定义变量,并且在 32 位平台都是 32 位的。

2.typedef 和结构体(重点)structpeople

{intage;charsex;

};1234512345

上面创建了一个新的数据类型 strcut people,注意,这个是数据类型,数据类型不占内存。structpeople p1,

p2;

11

这时候我们定义了两个变量,p1 和 p2,他们的数据类型是 struct people,以后我们每次定义变量都要写 struct people,是不是感觉很麻烦,使用 typedef 给它重命名一下就简单多了。typedefstructpeople

{intage;charsex;

}STRPEO;1234512345

这样 struct people 和 STRPEO 和 struct people 就有了一样的作用。以后我们在定义变量直接 STRPEO p1,p2; 是不是简单很多。

我们再来定义一个该结构体的指针

typedef struct people

{

int age;

char sex;

}*PSTRPEO;

虽然 * 和 PSTRPEO 很近,但是 * 是和 struct people 结合的,也就是说,PSTRPEO 的类型是 struct people *STRPEO P1;//定义结构体变量P1.age = 20;        //给结构体age成员赋值PSTRPEO P = &p1;    //使用结构体指针访问age成员printf("%d\n",p->age);      //结果是  20  12341234

3.typedef 和 #define(重点)

typedef 是给类型重命名,相当于一个数据类型,而 #define 是宏定义,在程序预处理时期直接替换typedefint*PMYINT;

MYINT a,

b;123123

相当于 int* a,int* b,两个变量的数据类型都是 int *#definePMYINTint*PMYINT a,

b;

123123

* 宏定义是直接替换,在这就是用 int 替换掉 PMYINT 相当于 int a,b;a 是 int 类型,b 是 int 类型。**

4.typedef 和 const(重点)回顾:const int * p; // 指针 p 指向的变量是不可变得

int * const p; // 指针 p 本身是不可改变的typedefint*PINT;

constPINT p1;

PINTconstp2;

12341234

按照我们平常的理解应该是 const int* p1; 和 int *const p2;p1 指向的变量是不可变的,p2 指针本身是不可变的。经过代码验证我们发现,无论是 const PINT p1; 还是 PINT const p2; 效果都等价于 int *const ,p1 和 p2 本身是不可变的。 那我们想让指针指向的变量不可变怎么办?typedefconstint*CPINT;

CPINT P1,

CPINT P2;//这样p1和p2本身可变,指向的变量不可变。123123

5.typedef 和函数指针函数:int * test(const char *,int);

函数指针 int* (* ptest)(const char * ,int)

我们每次定义这类函数的指针都要写这么长,很麻烦于是typedef int * (* PTEST)(const char * ,int);

以后我们在使用该函数指针时直接 PTEST P1,P2; 就可以了。

6. 使用 typedef 的意义

使用 typedef 的好处就是简化类型的书写,创建与平台无关的数据类型,有利于代码移植,int 在 32 位机器上就是 32 位的,在我们在 32 位机器上写的程序很可能无法在 64 位平台运行,我们可以把 int 用 typedef 重定义一下,即可增强代码的可移植性。

来源: http://www.bubuko.com/infodetail-2158085.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值