| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 470 人关注过本帖
标题:请教大家,下面 typedef 的用法是怎么一回事?
只看楼主 加入收藏
andrewkewang
Rank: 2
等 级:论坛游民
帖 子:44
专家分:42
注 册:2013-11-22
结帖率:88.89%
收藏
已结贴  问题点数:10 回复次数:2 
请教大家,下面 typedef 的用法是怎么一回事?
【原代码】
typedef  P2FUNC(void, TYPEDEF, Fee_EndNotificationPtrType)  (void);
2014-08-18 16:06
Rick_gu
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:37
专家分:108
注 册:2014-5-29
收藏
得分:10 
typedef声明,简称typedef,为现有类型创建一个新的名字,或称为类型别名,在结构体定义,还有一些数组等地方都大量的用到。

如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法?

使用typedef为现有类型创建同义字,定义易于记忆的类型名

typedef使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于“typedef”关键字右边。例如:



 
typedef int size;
 

此声明定义了一个int的同义字,名字为size。注意typedef并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要int的上下文中使用size:


void measure(size*psz);
 
 
size array[4];
 
 
size len=file.getlength();
 
 
std::vector<size>vs;
 

typedef 还可以掩饰复合类型,如指针和数组。

例如,你不用像下面这样重复定义有 81 个字符元素的数组:


char line[81];
 
char text[81];
 

定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样:



 
typedef char Line[81];
 

此时Line类型即代表了具有81个元素的字符数组,使用方法如下:






 
Line text,secondline;//
 
 
getline(text);
 

同样,可以像下面这样隐藏指针语法:






 
typedef char* pstr;
intmystrcmp(pstrp1,pstrp2);
 

这里将带我们到达第一个 typedef 陷阱。标准函数 strcmp()有两个‘ const char *'类型的参数。因此,它可能会误导人们像下面这样声明 mystrcmp():






 
int mystrcmp(const pstr p1,const pstr p3);
 

用GNU的gcc和g++编译器,是会出现警告的,按照顺序,‘const pstr'被解释为‘char* const‘(一个指向char的指针常量),两者表达的并非同一意思(详见C++ Primer 第四版 P112)。

char * const cp : 定义一个指向字符的指针常数,即const指针,常指针。

const char* p : 定义一个指向字符常数的指针,即常量指针。

char const* p : 等同于const char* p[2] 。

为了得到正确的类型,应当如下声明:






1
 
typedef const char* pstr;
 
2014-08-18 17:40
红叶。藏红月
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-8-19
收藏
得分:0 
涨姿势了
2014-08-19 01:32
快速回复:请教大家,下面 typedef 的用法是怎么一回事?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017536 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved