typedef 用法

typedef 容易误解,typedef 的真正意思是给一个已经存在的数据类型(注意:是类型不是变量)取一个别名,而非定义一个新的数据类型。

一、我们看一下比对:

typedef struct student
{
//code
}Stu_st,*Stu_pst;//命名规则请参考本章前面部分
A),struct student stu1;和Stu_st stu1;没有区别。
B),struct student *stu2;和Stu_pst stu2;和Stu_st *stu2;没有区别。

好,下面再把typedef 与const 放在一起看看:
C),const Stu_pst stu3;
D),Stu_pst const stu4;
大多数初学者认为

C)里const 修饰的是stu3 指向的对象;

D)里const 修饰的是stu4这个指针。

很遗憾,C)里const 修饰的并不是stu3 指向的对象。那const 这时候到底修饰的是什么呢?

我们在讲解const int i 的时候说过const 放在类型名“int”前后都行;而const int*p 与int * const p 则完全不一样。也就是说,我们看const 修饰谁都时候完全可以将数据类型名视而不见,当它不存在。反过来再看“const Stu_pst stu3”,Stu_pst 是“struct student{ /*code*/} *”的别名, “struct student {/*code*/} *”是一个整体。对于编译器来说,只认为Stu_pst 是一个类型名,所以在解析的时候很自然的把“Stu_pst”这个数据类型名忽略掉。
现在知道const 到底修饰的是什么了吧?^_^。

 

二、typedef int int32;错误

为什么? 答因为用typedef 取的别名不支持这种类型扩展。

 

三、#define a int[10]与typedef int a[10];

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值