黑马程序员技术交流社区

标题: typedef总结 [打印本页]

作者: Meniny    时间: 2014-8-19 03:35
标题: typedef总结
本帖最后由 Meniny 于 2014-8-19 03:40 编辑

只是关于typedef的总结,会用的飘过即可。

1、我们可以为基本数据类型定义别名
格式:
  1. typedef 类型名称 别名;
复制代码


示例:
  1. typedef int Integer;
  2. Interger i1 = 0;
  3. int i2 = 0;
复制代码


2、我们可以为指针类型定义别名
格式:
  1. typedef 类型名称* 别名;
复制代码


示例:
  1. typedef char* String;
  2. String c1 = "hello";
  3. char *c2 = "hallo";
复制代码


3、我们还可以为刚才的别名再次定义别名
格式:
  1. typedef 别名 新别名;
复制代码


示例:
  1. typedef int Integer;
  2. typedef Integer Number;
  3. int i1 = 0;
  4. Integer i2 = 1;
  5. Number i3 = 2;
复制代码


4、我们可以为结构体定义别名
格式:
  1. typedef struct 结构体名称
  2. {
  3.         ...;
  4. }别名;
复制代码

  1. typedef struct 结构体名称

  2. {
  3.         ...;
  4. };
  5. typedef struct 结构体名称 别名;
复制代码

  1. typedef struct
  2. {
  3.         ...;
  4. }别名;
复制代码


示例:
  1. typedef struct Students
  2. {
  3.         int age;
  4. } Stu;
  5. struct Students s1 = {1};
  6. Stu s2 = {2};
复制代码

  1. typedef struct Students
  2. {
  3.         int age;
  4. };
  5. typedef struct Students Stu;
  6. struct Students s1 = {1};
  7. Stu s2 = {2};
复制代码

  1. typedef struct
  2. {
  3.         int age;
  4. } Stu;
  5. Stu s1 = {1};
复制代码


5、我们可以为枚举定义别名
格式:
  1. typedef enum 枚举名称{成员1,成员2,...} 别名;
复制代码



  1. <div><span style="line-height: 2.2em;">typedef enum 枚举名称{成员1,成员2,...};</span></div><div><span style="background-color: rgb(247, 247, 247);">typedef enum 枚举名称 别名;</span></div>
复制代码



示例:
  1. typedef enum Gender{Male,Female} Sex;
  2. enum Gender g1;
  3. Sex s1;
复制代码

  1. typedef enum Gender{Male,Female};
  2. typedef enum Gender Sex;
  3. enum Gender g1;
  4. Sex s1;
复制代码


6、我们还可以为指向函数的指针定义别名
格式:
  1. typedef 类型名称 (*别名)(行参类型1,行参类型2,...);
复制代码


示例:
  1. typedef int (*Cal)(int,int);
  2. int sum(int a,int b)
  3. {
  4.         return a + b;
  5. }
  6. int minus(int a,int b)
  7. {
  8.         return a - b;
  9. }
  10. int main()
  11. {
  12.         //int (*p1)(int,int) = sum;
  13.         Cal p1 = sum;
  14.         //int (*p2)(int,int) = minus;
  15.         Cal p2 = minus;
  16.         return;
  17. }
复制代码


7、我们可以为结构体指针定义别名
格式:
  1. struct 结构体名称

  2. {
  3.         ...;
  4. };
  5. typedef struct 结构体名称 * 别名;
复制代码

  1. typedef struct 结构体名称
  2. {
  3.         ...;
  4. } * 别名;
复制代码


示例:
  1. struct Students

  2. {
  3.         int age;
  4. };
  5. typedef struct Students * Point;
  6. struct Students p = {20};
  7. sturct Students *p1 = &p;
  8. Point p2 = &p;
复制代码

  1. typedef struct Students
  2. {
  3.         int age;
  4. } * Point;
  5. struct Students p = {20};
  6. sturct Students *p1 = &p;
  7. Point p2 = &p;
复制代码


8、注意:
在某些场合下我们也可以使用宏定义来定义别名,例如下面代码:
  1. typedef int Integer;
  2. int main()
  3. {
  4.         int i1 = 0;
  5.         Integer i2 = 0;
  6.         return 0;
  7. }
复制代码


它的效果等同于:
  1. #define Integer int
  2. int main()
  3. {
  4.         int i1 = 0;
  5.         Integer i2 = 0;
  6.         return 0;
  7. }
复制代码


但这两种方法并不是在所有情况下都可以能得到同样的效果,例如:
代码一:
  1. typedef char * String;
  2. int main()
  3. {
  4.         String s1,s2;
  5.         return 0;
  6. }
复制代码


代码二:
  1. #define String char *;
  2. int main()
  3. {
  4.         String s3,s4;
  5.         return 0;
  6. }
复制代码


代码一中,s1与s2均为char *
代码二中,s3为char *,s4却为char。
这是因为#define只是将代码中的String全部替换为char *而已:
替换前:
  1. String s3,s4;
复制代码


替换后:
  1. char * s3,s4;
复制代码


替换后的代码等同于:
  1. char * s3;
  2. char s4;
复制代码





作者: 杜工    时间: 2014-8-19 07:24
好全面的样子。。。
作者: 朱亚男    时间: 2014-8-19 08:15
不错!赞一个
作者: ★Joean_Zhou    时间: 2014-8-19 09:05
问问楼主这个程序是怎么插入的啊?我一直都是复制张贴
作者: Meniny    时间: 2014-8-19 10:08
★Joean_Zhou 发表于 2014-8-19 09:05
问问楼主这个程序是怎么插入的啊?我一直都是复制张贴

插入?代码么?编辑器的工具离有代码工具的
作者: itheimaXYP    时间: 2014-8-19 13:19
LZ很辛苦啊 敲了很多代码
作者: 曹雨    时间: 2014-8-21 05:14
★Joean_Zhou 发表于 2014-8-19 09:05
问问楼主这个程序是怎么插入的啊?我一直都是复制张贴

看到你菜鸟不容易啊,哈哈哈哈。记得打球叫我。我很菜求带
作者: ★Joean_Zhou    时间: 2014-8-21 08:25
曹雨 发表于 2014-8-21 05:14
看到你菜鸟不容易啊,哈哈哈哈。记得打球叫我。我很菜求带

嘿嘿,篮球我也是个菜鸟呢,,很差劲的说,不过呢可以陪你练习练习!哈哈。。。你去北京了吗
作者: 曹雨    时间: 2014-8-21 09:15
★Joean_Zhou 发表于 2014-8-21 08:25
嘿嘿,篮球我也是个菜鸟呢,,很差劲的说,不过呢可以陪你练习练习!哈哈。。。你去北京了吗 ...

没呢。打算九月底去,你呢?
作者: ixx__123    时间: 2014-8-21 13:50
     楼主  真辛苦,   敲了这么多的代码
作者: qq541955920    时间: 2014-8-21 14:27
神贴!!!点赞
作者: xiniuniu    时间: 2014-8-21 15:09
总结得很全面啊!  收藏啦
作者: ★Joean_Zhou    时间: 2014-8-23 10:33
曹雨 发表于 2014-8-21 09:15
没呢。打算九月底去,你呢?

嘿嘿。我也是,九月底去。。。
作者: ★彬★卍囧神    时间: 2014-8-23 13:38
你总结的很不错
作者: ❤如止水之絕境    时间: 2014-8-23 20:00
呵呵,不错哦。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2