typedef与#define
程序员文章站
2024-03-23 11:31:46
...
typedef 声明新类型名代替原来的类型
1、简单的用一个新的类型名代替原有的类型名
typedef int Integer; //指定Integer为类型名,作用与int相同
Integer i, j; //作用与int i, j;相同,都是定义两个int类型的变量
2、命名一个简单的类型名代替复杂的类型表示方法
(1)命名一个新的类型名代替结构体类型
typedef struct
{
int month;
int day;
int year;
}Date;
以上声明了一个新类型名Date,代表上面的一个结构体类型。然后可以用新的类型名Date去定义变量,如:
Date birthday;
Date *p;
(2)命名一个新的类型名代替数组类型
typedef int Num[10];//声明Num为整型数组类型名
Num a;//定义a为整型数组名,它有10个元素
(3)命名一个新的类型名代表指针类型
typedef char * String;//声明String为字符指针类型
String p, s[10];//定义p为字符指针变量,s为字符指针数组
(4)命名一个新的类型名代替执行函数的指针类型
typedef int (*Pointer)(int, int);//声明Pointer为指向函数的指针类型,该函数返回整型值
Pointer p1, p2;//p1, p2为Pointer类型的指针变量
#define
define在预编译时处理,只能做简单的字符串替换。typedef是在编译阶段处理的
Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理
器做类似的事。例如,思考一下下面的例子:
#define dPS struct s *
typedef struct s * tPS;
以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?
这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是
:typedef更好。思考下面的例子:
dPS p1,p2;
tPS p3,p4;
第一个例子扩展为
struct s * p1, p2;
上面的代码定义p1为一个指向结构的指针,p2为一个实际的结构。
第二个例子正确地定义了p3 和p4 两个指针。
推荐阅读
-
C语言 typedef 和define
-
#define, const与inline
-
const与#define
-
#if#ifdef#define等宏定义使用
-
DB2生成表model与mybatis的mapper中的常用方法 博客分类: mybatis db2mybatis
-
typedef与#define
-
菜鸟浅谈Typedef与Define
-
DB2 与 JDBC DB2JDBCIBM应用服务器数据结构
-
重温Struts--ActionMapping和ActionForward 博客分类: Web 框架与开发 Struts浏览器应用服务器数据挖掘Web
-
Web应用系统设计原则 博客分类: 架构与设计 Web网络应用数据结构数据挖掘嵌入式