C++ typedef用法
来源:互联网 发布:淘宝怎么优化排名 编辑:程序博客网 时间:2024/06/08 16:25
typedef的语法描述:
在现实生活中,信息的概念可能是长度,数量和面积等。在C++语言中,信息被抽象为int、float和 double等基本数据类型。从基本数据类型名称上,不能够看出其所代表的物理属性,并且int、float和double为系统关键字,不可以修改。为了解决用户自定义数据类型名称的需求,C++语言中引入类型重定义语句typedef,可以为数据类型定义新的类型名称,从而丰富数据类型所包含的属性信息。
typedef的定义
typedef 类型名称类型标识符; 如 typedef int LENGTH;
可使用LENGTH定义变量; 如 LENGTH c;
typedef 的主要应用形式:
1、 为基本数据类型定义新的类型名、定义与平台无关的类型。举例如上
2、 为自定义数据类型(结构体、公用体和枚举类型)定义简洁的类型名称。
举例:typedef struct { int x;}Point; 可用Point来声明结构体;
3、 为数组定义简洁的类型名称。
举例:typedef int array_10 [10]; 可使用 array_10 a;a为int数组,10个元素
4、 为指针定义简洁的名称//普通指针、函数指针
typedef int(*MyFun)(int a,int b); 可使用MyFun声明函数指针、MyFun p;
int Max(int a,int b); p=Max;
5、 为复杂声明定义新的简单别名。
举例1:原始:int *(*a[5])(int ,char*);变量名为a;
使用typedef int *(*p)(int ,char*); p a[5]即可
举例2:原始:void (*b[10])(void (*)()); 分两步替换即可。先替换右侧括号中的。
typedefvoid(*pFun1)();
typedefvoid(*pFun2)(pFun1); pFun2 b[10]即可
举例3:原始:double (*)()(*e)[9]; 分两步替换即可。
typedef double(*p);
typedef p(*pFun1)[9]; pFun1 e;即可
理解复杂声明可用的“右左法则”;从变量名看起,先往右,再往左,碰到一个圆括号就 调整阅读的方向,括号内分析完就跳出括号,依然先右后左的顺序,如此循环到结束。
举例:int (*func[5])(int *); func右边是一个[]运算符,表明func是具有5个元素的数 组,左边有*,表明func的元素是指针,[]运算符优先级比*高,func先跟[]结合).
Func数组的元素是函数类型的指针,它指向的函数具有int *类型的形参。
两个模式:
typedef (*)(…) 函数指针
typedef (*)[] 数组指针
在c++类中使用函数指针:
typedef 返回类型(类名::*新类型)(参数表);使用类成员函数必须有”->*”或者“.*”
需要注意的问题:
1、 typedef不创建新类型,只是为已有类型创建一个新名称。
2、 它只适用于类型名称定义,不适应于变量定义。
3、 与#define可达到相同效果,但实质不同。#define主要定义常量,此常量可以为任何的字符及其组合,在编译之前,将此常量出现的所有位置,用其代表的字符或字符组合无条件的替换,然后进行编译。typedef是为已知数据类型增加一个新名称,其原理与使用int、double等保留字一致。
typedef和define具体的详细区别:
1、#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r会替换为3.1415926*r*r如果你把#define语句中的数字9写成字母g预处理也照样带入。
2、typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名。
3、typedef int * int_ptr与 #define int_ptr int * 作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说,#define在预处理时进行简单的替换,而typedef不是简单替换,而是采用如同定义变量的方法那样来声明一种类型。举例:t
ypedef int* pint;
#definePINT int*
const pint p;//p不可更改。但p指向的内容可更改。
const PINTp;//p可更改,但是p指向的内容不可更改。
陷阱:
1、typedef是定义了一种类型的新别名,不同于宏,它不是简单的字符串替换。
typedef char *PSTR; int fun(const PSTR,const PSTR);
const PSTR 不是const char *; 而是 char * const;
2、typedef在语法上是一个存储类的关键字(如auto、extern、mutable、static、register等一样),虽然它并不真正影响对象的存储特性,如typedef static int INT2;//不可行
- c语言 typedef用法
- C语言 typedef用法
- C++typedef的用法
- C/C++ typedef用法
- C/C++ typedef用法
- c 语言 typedef 用法
- C/C++ typedef用法
- C/C++ typedef用法
- C/C++ typedef用法
- C/C++ typedef用法
- C/C++ typedef用法
- C/C++ typedef用法
- C/C++ typedef用法
- c++typedef用法小结
- C/C++ typedef用法
- C语言中typedef用法
- c语言typedef的用法
- C语言中typedef用法
- 如何使用webpack+react+redux从头搭建Todolist应用
- 动态规划解背包问题
- ffmpeg()音频转码
- Mysql随堂笔记
- 不是你无法入门自然语言处理(NLP),而是你没找到正确的打开方式
- C++ typedef用法
- xml验证
- Java实现快速排序算法
- 寻找最称手的思维导图软件(思维导图大比拼)
- struts2第十六讲学习笔记,文件下载
- 剑指offer 面试题46 求 1+2+3+...+n (不使用乘除以及条件判断语句求前 n 项正整数的和)
- 王学岗再探RxJava
- 动态规划解最长子序列
- 空瓶换汽水问题(难度:1颗星)