typedef用法总结。
引用贴:http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html
首先#define为预处理,与typedef是完全不同的机制。详细机制尚未完全明了。请参考前人文章。
用法一:指针变量代替。
char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,和一个字符变量
typedef char* PCHAR; // 别名不建议全大写
PCHAR pa, pb; // 这是两个char类型的指针。
原文认为这种方法很有用。但个人认为这种方法容易引起误解。如果要使用,需要在变量名中有指针的隐含指示。
用法二:struct的使用省略。
struct tagPOINT1
{
int x;
int y;
};
struct tagPOINT1 p1;
如果使用typedef,则可以这样:
typedef struct tagPOINT
{
int x;
int y;
}POINT;
POINT p1; // 这样就比原来的方式少写了一个struct。不建议使用此方式。但需要能够理解他人代码中这样的使用。
用法三:用typedef来定义与平台无关的类型。(个人认为最常用的用法)
REAL代表最高精度的浮点数。
typedef long double REAL; //最高支持lond double 平台
typedef double REAL;//最高支持double 平台
typedef float REAL;//最高支持float 平台
也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。
用法四:对类,定义一个容易理解的别名。
例子1:
class ABC{ /*code*/ };
typedef ABC Rectangle;
你看到ABC肯定不知道这个类是做什么用的。但当你看到Rectangle最少你应该知道这个类是一个矩形。
PS:不建议任何人构建ABC这种类。但你无法控制所有人。所以有时候Typedef是一个很好的选择。
例子2:
template< class typeA > class ABC{ /* code */ };
typedef < calss AAA >ABC RectangleA;
typedef < calss BBB >ABC RectangleB;
此例子中变量名非常不推荐。因此为上份工作的代码。所以只能使用AAA和BBB代替。但从中应该也能看到用法。
用法五:函数指针的别名。
格式:typedef 返回类型(*新类型)(参数表)
typedef char (*ptrFun)(int);
ptrFun pFun;
char getInt(int a){ return a;}
int main()
{
pFun = getInt;
cout<< (*pFun)(2) << endls;
return 0;
}
暂未使用此方式来编写代码。但存在即合理。本质上,和类的别名无什么区别。
一个未试验的猜想:是否可以将 *ptrFun 变为 ptrFun ?
解答原文的一个问题:(仅个人认知,不代表绝对正确。欢迎讨论)
原文案例:
typedef char * pStr;
char string[4] = "abc";
const char *p1 = string;
const pStr p2 = string;
p1++;
p2++;
原文中,指出P2++将会出错。
1:pStr是一个自定义的类型,在前面加const将会使我们无法改变这个类型的值。
2:反推论,这个pStr是保存的是一个指针。具体内容为指针地址。当对指针地址进行++时,会改变具体内容。所以报错。
typedef用法总结。的更多相关文章
- C++ typedef用法小结 (※不能不看※)
C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...
- [转载] C++ typedef 用法详解
typedef的语法描述 在现实生活中,信息的概念可能是长度,数量和面积等.在C语言中,信息被抽象为int.float和 double等基本数据类型.从基本数据类型名称上,不能够看出其所代表的物理属性 ...
- typedef用法小结
typedef用法小结- - 注意:本文转自网络,版权归原作者所有. typedef typedef用法小结- - 这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等 ...
- c++ --> typedef用法总结
typedef用法总结 一.四大用途 用途1 定义类型别名,在大量使用指针的地方,typedef更方便 typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // ...
- [C++]typedef用法
参考:C/C++ typedef用法详解(真的很详细) 四个用途 定义一种类型的别名,而不是简单的宏替换 定义struct新对象的别名 定义和平台无关的类型 为复杂声明定义一个简单的别名 typede ...
- C++进阶2. typedef用法
C++ 中的typedef用法 20131011 Typedef在C++中是一个关键字,他的用法有多重,但是自己又说不全面,所以整理一下: 1.用类型的别名 typedef char* PChar; ...
- (转)typedef用法
Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...
- C语言中typedef用法
C语言中typedef用法 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等) ...
- C++ typedef用法小结
一.typedef的四个用法 用法一: 为复杂的声明定义一个新的简单的别名.方法是:在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版.举例 ...
- (转)[C++语法] 关键字typedef用法
转自http://www.cnblogs.com/SweetDream/archive/2006/05/10/395921.html C/C++语言中的typedef相信大家已经不陌生,本文对C/C+ ...
随机推荐
- sql server数据库区分大小写设置
数据库表中字段alter Table TableName 区分大小写 ALTER Column ColumnName VARCHAR(50) COLLATE Chinese_PRC_CS_AS不区分大 ...
- HtmlHelp
@Html.Label("Label", "Label") @*渲染成<label for="Label">Label</ ...
- github Permission denied (publickey)解决办法
想要玩玩git,参考了网友懒惰之计的一篇Blog<github:如何获取项目源代码 >,按部就班完成了所有的步骤的, 可在测试的时候,遇到了问题,总是报错”github Permissio ...
- Method to fix "Naming information cannot be located because the target principal name is incorrect." for AD replication failure
Assume Failure DC FP01 and Working DC DC01 1. Stop the Key Distribution Center (KDC) service on FP01 ...
- Submission Details
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- python面向对象(上)
创建类 Python 类使用 class 关键字来创建.简单的类的声明可以是关键字后紧跟类名: class ClassName(bases): 'class documentation string' ...
- My97DatePicker使用的问题
我在iframe中使用My97DatePicker时,发现第一次点击左边的菜单时,在右边的页面可以弹出日期框: 当我第二次点击菜单时,右边的日期文本框却弹出了页面的内容,而不是日期选择框: 首先怀疑是 ...
- Oracle表分区[转]
废话少说,直接讲分区语法. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: create table gra ...
- [汇编语言]-第八章 div指令,伪指令dd,dup
1- div除法指令 (1) 除数: 有8位和16位两种,在一个寄存器或内存单元中. (2) 被除数: 默认放在AX和DX或AX中 除数为8位, 被除数为16位, 默认在AX中存放. 除数为16位, ...
- sqlite在Android上的一个bug:SQLiteCantOpenDatabaseException when nativeExecuteForCursorWindow
更多内容在这里查看 https://ahangchen.gitbooks.io/windy-afternoon/content/ ::-/com.company.product W/System.er ...