C语言中typedef的用法和#define区别

typedef 类型定义
typedef 是给各种数据类型定义新名字,主要是用来简洁的表示一些复杂的数据类型,比如说指向其他对象指针之类
defined也有这个意思,但是define宏只是进行一种简单的替换。
普通的变量声明方式,
比如
声明一个字符型变量   char c;
声明一个字符型指针变量为 char *cptr;
fptr被声明为一个返回为void形参为(int,int)类型的函数指针void (*fptr)(int, int); 
但是当我们在这两个声明之前加上typedef关键字的时候
typedef char c; 
这个时候,c就是一个char的一个别名,在域作用范围之内,我们都可以用c表示char数据类型
typedef char *cptr ; 
同理 这个时候cptr就是char *类型的一个别名,cptr就意味着是char *数据类型
typedef void (*fptr)(int, int);
这之后的作用域之类,fptr就是该类型函数指针数据类型的别名。
例如fptr p1,p2;就是声明 p1 p2这两个该类型函数指针变量类型。

在typedef 与defined的区别
typedef可以看场一种彻底封装的数据类型,在这之后的数据声明之中,新的别名就可以一种数据类型的表示,其用法和int,char几乎一样。
但是defined宏就是将该相同字符文本进行一个简单的替换。
在用法上
1:typedef不能进行对符号类型名的拓展
比如说
typedef int  Num;
unsigned Num i;
非法,错去,编译器会报错。
但是若是
defined NUM int;
unsigned NUM i;
这个是完全没有问题的,i就是unsigned int 数据类型 
2:在连续几个变量的声明中,typedef都能够保证声明的变量类型均为同一种类型,但是#define就无法保证
例如:
typedef char *Cp;
Cp  p1,p2;
p1 p2都是char *类型的变量
#define CP char*;
CP  p1,p2;
在预编译的时候CP  p1,p2;会展开成char *p1,p2;
则这个时候 p1是char *类型的变量 p2则是char 类型的变量。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值