本帖最后由 Meniny 于 2014-8-19 03:40 编辑
只是关于typedef的总结,会用的飘过即可。
1、我们可以为基本数据类型定义别名
格式:
示例:
- typedef int Integer;
- Interger i1 = 0;
- int i2 = 0;
复制代码
2、我们可以为指针类型定义别名
格式:
示例:
- typedef char* String;
- String c1 = "hello";
- char *c2 = "hallo";
复制代码
3、我们还可以为刚才的别名再次定义别名
格式:
示例:
- typedef int Integer;
- typedef Integer Number;
- int i1 = 0;
- Integer i2 = 1;
- Number i3 = 2;
复制代码
4、我们可以为结构体定义别名
格式:
- typedef struct 结构体名称
- {
- ...;
- }别名;
复制代码
- typedef struct 结构体名称
- {
- ...;
- };
- typedef struct 结构体名称 别名;
复制代码
- typedef struct
- {
- ...;
- }别名;
复制代码
示例:
- typedef struct Students
- {
- int age;
- } Stu;
- struct Students s1 = {1};
- Stu s2 = {2};
复制代码
- typedef struct Students
- {
- int age;
- };
- typedef struct Students Stu;
- struct Students s1 = {1};
- Stu s2 = {2};
复制代码
- typedef struct
- {
- int age;
- } Stu;
- Stu s1 = {1};
复制代码
5、我们可以为枚举定义别名
格式:- typedef enum 枚举名称{成员1,成员2,...} 别名;
复制代码
- <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>
复制代码
示例:
- typedef enum Gender{Male,Female} Sex;
- enum Gender g1;
- Sex s1;
复制代码
- typedef enum Gender{Male,Female};
- typedef enum Gender Sex;
- enum Gender g1;
- Sex s1;
复制代码
6、我们还可以为指向函数的指针定义别名
格式:
- typedef 类型名称 (*别名)(行参类型1,行参类型2,...);
复制代码
示例:
- typedef int (*Cal)(int,int);
- int sum(int a,int b)
- {
- return a + b;
- }
- int minus(int a,int b)
- {
- return a - b;
- }
- int main()
- {
- //int (*p1)(int,int) = sum;
- Cal p1 = sum;
- //int (*p2)(int,int) = minus;
- Cal p2 = minus;
- return;
- }
复制代码
7、我们可以为结构体指针定义别名
格式:
- struct 结构体名称
- {
- ...;
- };
- typedef struct 结构体名称 * 别名;
复制代码
- typedef struct 结构体名称
- {
- ...;
- } * 别名;
复制代码
示例:
- struct Students
- {
- int age;
- };
- typedef struct Students * Point;
- struct Students p = {20};
- sturct Students *p1 = &p;
- Point p2 = &p;
复制代码
- typedef struct Students
- {
- int age;
- } * Point;
- struct Students p = {20};
- sturct Students *p1 = &p;
- Point p2 = &p;
复制代码
8、注意:
在某些场合下我们也可以使用宏定义来定义别名,例如下面代码:
- typedef int Integer;
- int main()
- {
- int i1 = 0;
- Integer i2 = 0;
- return 0;
- }
复制代码
它的效果等同于:
- #define Integer int
- int main()
- {
- int i1 = 0;
- Integer i2 = 0;
- return 0;
- }
复制代码
但这两种方法并不是在所有情况下都可以能得到同样的效果,例如:
代码一:
- typedef char * String;
- int main()
- {
- String s1,s2;
- return 0;
- }
复制代码
代码二:
- #define String char *;
- int main()
- {
- String s3,s4;
- return 0;
- }
复制代码
代码一中,s1与s2均为char *
代码二中,s3为char *,s4却为char。
这是因为#define只是将代码中的String全部替换为char *而已:
替换前:
替换后:
替换后的代码等同于:
|