历史的误会----也许应该是 typerename

很多人认为 typedef 是定义新的数据类型,这可能与这个关键字有关。本来嘛, type
数据类型的意思; def(ine) 是定义的意思,合起来就是定义数据类型啦。不过很遗憾,这种
理解是不正确的。也许这个关键字该被替换为“ typerename ”或是别的词。
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 ;没有区别。
这个地方很多初学者迷惑, B )的两个定义为什么相等呢?其实很好理解。我们把
struct student { /*code*/} ”看成一个整体, typedef 就是给“ struct student {/*code*/}” 取了个
别名叫“ Stu_st ”;同时给“ struct student { /*code*/} *” 取了个别名叫“ Stu_pst ”。只不过这两
个名字同时取而已,好比你给你家小狗取了个别名叫“大黄”,同时你妹妹给小狗带了小帽
子,然后给它取了个别名叫“小可爱”。 ^_^
好,下面再把 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 到底修饰的是什么了吧? ^_^
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千秋TʌT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值