typedef关键字
来源:互联网 发布:秦安观点 网络强国 编辑:程序博客网 时间:2024/05/16 10:26
一: typedef 简介
1:typedef 是给类型重命名,也就是说该关键字加工出来的都是类型,而不是变量。
2:C语言中的类型主要有两种,分别是编译器定义的类型(int double 等)和用户自定义类型(数组类型,指针结构体,函数等);
3:typedef 经常用于给比较长的自定义类型起个别名。便于使用。增强程序的可读性
二:类型和变量的区别
1:类型是一个数据模版,是一个实实在在的数据。 不占用内存空间
2:变量占用内存空间
三:typedef 和 # define宏的区别
1:执行时间不同
typedef 在编译阶段起作用,有类型检查的功能
#define 宏定义在编译之前的预处理阶段,只进行替换不进行检查
2:功能略有差异
typedef 用来定义与类型无关的别名,定义与平台无关的数据类型
#define 不仅可以取别名,还可以定义常量,变量
3:作用域不同
typedef 有作用域
#define 无作用域
4:与指针结合时不同(重要)
- typedef int * pint;
- #define PINT int *
- int i1 = 1, i2 = 2;
- const pint p1 = &i1; //p不可更改,p指向的内容可以更改,相当于 int * const p;
- const PINT p2 = &i2; //p可以更改,p指向的内容不能更改,相当于 const int *p;或 int const *p;
- pint s1, s2; //s1和s2都是int型指针
- PINT s3, s4; //相当于int * s3,s4;只有一个是指针。
四:typedef 与结构体的混用(一般C项目中的结构体都这样定义,一般用大写,便于记忆)
typedef struct teacher
{
char name[20];
int age;
}Teacher, *pTeacher;
, 1:定义了两个类型,每个类型有两个名字。(注意是类型,不是结构体变量)
原类型 别名a: 结构体类型 : strucrt teacher teacher
b:结构体指针类型 : struct teacher * pTeacher
2:使用时
原方法 使用别名
strucrt teacher p1; teacher p1;
struct teacher * p2;pTeacher p2;(具体使用见结构体指针的使用)
五:typedef 与 const
当const和typedef一起出现时,typedef不会是简单的字符串替换(陷阱1)
1: typedef int *PINT; const PINT p2; 相当于是int *const p2;
2: typedef int *PINT; PINT const p2; 相当于是int *const p2;
3: 如果想得到 const int *p,需要这样定义 typedef const int *CPINT; CPINT p1;
注意:typedef static int INT2; //不可行 (陷阱2)
/******************************************************************************/
六: 使用typedef 的意义
1:简化类型的描述。
一般原则,先找变量,从右向左。
例1: 原声明函数:int *(*a[10]) (int *, char*); 变量名为a;
简化:typedef *(*Func)(int *, char*); 起别名为Func
Func a[10];
例2:原函数声明 : doube(*)() (*b)[9]; 变量名为b;
简化 :typedef (*fun_1)(); 先简化左边
typedef fun_1(*Func)[9];再简化右边
Func *b;
例3:原函数声明 :void (*c[10]) (void (*)()); 变量名为c;
简化 :typedef void (*fun_2)();
typedef (*Func)fun_2;
Func c[10];
type (*)(....)函数指针
type (*)[]数组指针
2:很多编程体系下,人们倾向于不使用int、double等C语言内建类型,因为这些类型本身和平台是相关的(譬如int在16位机器上是16位的,在32位机器上就是32位的)。为了解决这个问题,很多程序使用自定义的中间类型来做缓冲。譬如linux内核中大量使用了这种技术.
内核中先定义:typedef intsize_t; 然后在特定的编码需要下用size_t来替代int(譬如可能还有typedef int len_t)
3:STM32的库中全部使用了自定义类型,譬如typedef volatile unsigned int vu32;
- 关键字typedef
- typedef关键字
- 关键字typedef
- typedef 关键字
- 关键字typedef
- typedef关键字
- typedef关键字
- typedef关键字
- typedef 关键字
- typedef关键字
- typedef关键字
- typedef和typename关键字
- typedef和typename关键字
- 搞定typedef 、const 关键字
- typedef和typename关键字
- typedef和typename关键字
- typename和typedef关键字
- typedef关键字详解
- 视频直播linux环境搭建
- [CTSC2007]动物园zoo
- Windows上安装Tensorflow 以及集成Spark遇到的问题
- Python获取当前模块名
- 嵌入式linux面试题解析(四)——逻辑推理一
- typedef关键字
- oracle如何快速创建千万数量级数据
- 《DOS命令一日通》第三章 磁盘的准备与检查
- <i></i>为0*0时,显示背景
- ci框架&tp框架隐藏index.php
- 27 个Jupyter Notebook的小提示与技巧
- Java基础总结
- 生产计划管理软件功能是什么?对生产管理有何好处?
- 算法9 Group Anagrams