typedef与#define

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 两个指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值