typedef 及其与struct的结合使用

 1 //相当于为现有类型创建一个别名,或称类型别名。
 2 //整形等
 3 typedef int size;
 4 
 5 
 6 //字符数组
 7 char line[81];
 8 char text[81];//=>
 9 
10 typedef char Line[81];
11 Line text, secondline;
12 
13 
14 //指针
15 typedef char * pstr;
16 int mystrcmp(pstr p1, pstr p2);//注:不能写成int mystrcmp(const pstr p1, const pstr p3);因const pstr p1解释为char * const cp(不是简单的替代)
17 
18 
19 //与结构类型组合使用
20 typedef struct tagMyStruct
21 {
22 int iNum;
23 long lLength;
24 } MyStruct;//(此处MyStruct为结构类型别名)=>
25 
26 struct tagMyStruct
27 {
28 int iNum;
29 long lLength;
30 };//+
31 typedef struct tagMyStruct MyStruct;
32 
33 
34 //结构中包含指向自己的指针用法
35 typedef struct tagNode
36 {
37 char *pItem;
38 pNode pNext;
39 } *pNode;//=>error
40 //1)
41 typedef struct tagNode
42 {
43 char *pItem;
44 struct tagNode *pNext;
45 } *pNode;
46 //2)
47 typedef struct tagNode *pNode;
48 struct tagNode
49 {
50 char *pItem;
51 pNode pNext;
52 };
53 //3)规范
54 struct tagNode
55 {
56 char *pItem;
57 struct tagNode *pNext;
58 };
59 typedef struct tagNode *pNode;
60 
61 
62 //与define的区别
63 //1)
64 typedef char* pStr1;//重新创建名字
65 #define pStr2 char *//简单文本替换
66 pStr1 s1, s2;
67 pStr2 s3, s4;=>pStr2 s3, *s4; 
68 //2)define定义时若定义中有表达式,加括号;typedef则无需。
69 #define f(x) x*x=>#define f(x) ((x)*(x))
70 main( )
71 {
72 int a=6,b=2,c;
73 c=f(a) / f(b);
74 printf("%d \\n",c);
75 }
76 //3)typedef不是简单的文本替换
77 typedef char * pStr;
78 char string[4] = "abc";
79 const char *p1 = string;
80 const pStr p2 = string;=>error
81 p1++;
82 p2++;
83 
84 //1) #define宏定义有一个特别的长处:可以使用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
85 //2) typedef也有一个特别的长处:它符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。

 1 //
 2 //C中定义结构类型
 3 typedef struct Student
 4 {
 5 int a;
 6 }Stu;//申明变量Stu stu1;或struct Student stu1;
 7 //
 8 typedef struct
 9 {
10 int a;
11 }Stu;//申明变量Stu stu1;
12 
13 //C++中定义结构类型
14 struct Student
15 {
16 int a;
17 };//申明变量Student stu2;
18 
19 
20 //C++中使用区别
21 struct Student 
22 { 
23 int a; 
24 }stu1;//stu1是一个变量 。访问stu1.a
25 
26 typedef struct Student2 
27 { 
28 int a; 
29 }stu2;//stu2是一个结构体类型 访问stu2 s2; s2.a=10;
30 //还有待增加。

 

posted on 2014-02-21 08:57  Sweet Smile  阅读(1404)  评论(0编辑  收藏  举报