现在的位置: 首页 > 综合 > 正文

[原创]typedef再教育

2013年10月03日 ⁄ 综合 ⁄ 共 998字 ⁄ 字号 评论关闭

[原创]typedef再教育

author: is01sjjj from SYSU 2006.5.31

http://blog.csdn.net/is01sjjj

1. typedef int size_t;
对于上面这种申明,多数书籍和老师都会说。这是把size_t定义为int的别名。即typedef A B;是把B定义为A的别名。
这样说结果没错,但是理解文法上就未必正确了,如下所示就不可以这样理解:

2. typedef int int_array[4];
   int_array a, b;
如果这个你也明白的话,那么请看:

3. typedef int (*PF) (const char *, const char *);
   PF Register(PF pf);
如果这个你也明白的话,后面的内容就不是为你准备了的。如果你不明白,那么请看:(这里我尽量通俗的解释)

如果你觉得如下申明很麻烦:
int a[4], b[4], c[4];
你想通过下面这样的申明来简化或者隐藏复杂类型:
int_array a, b, c;
那么,使用typdef的办法是:
1. 找到你所要申明的通用格式。例如这里申明int a[4], b[4], c[4];只有a,b,c不同,它们有相同的申明模式 int <名字>[4];
2. 用你想申明的新类型名代替通用格式中的变化部分。例如这里就是用新类型int_array代替a,b,c所在的位置,再在前面加上typedef符号,即:
   typedef int int_array[4];
3. 以后你想申明处在上面int_array位置的a,b,c类型时,就可以用如下语句:
    int_array a, b, c;

简单点说在一个定义 typedef <字符串>;中, <字符串>中会出现一个未定义的类型名Type_A, 当你使用该typedef的时候:
  Type_A object; 它的含义就是:你实际上申明的是用object名去替换<字符串>中的 Type_A 。
例如 typedef int int_array[4];
     int_array object;
实际上你写的申明是:用object替换 字符串" int int_array[4];"中的 int_array得到的结果: int object[4];
这也就是编译器处理tyepdef定义的原理。

经过这样的解释,大家应该很容易看懂3.的函数指针typedef了吧,是不是很简单!

如果你读过本原创文有所收获的话,请在回复里留言一下^_^
  

抱歉!评论已关闭.