标签:ora ati div ring char 使用 stat void 操作
typedef 的讲解与应用实例
/*用法一:类型的重定义*/ typedef unsigned char u8; typedef char * PCHAR; ......
这里的第一句是给unsigned char类型重新起个别名,叫 u8 应用时看到u8 定义的变量,就相当于unsigned char 类型,两者是完全等价的。同理第二句是给char *
起了个别名PCHAR ,即 PCHAR 类型代表着指向字符串类型的指针。
1 /*用法二:与结构体结合使用*/ 2 typedef struct tagMyStruct 3 { 4 int iNum; 5 6 long lLength; 7 8 }MyStruct;
这个代码实际上相当于进行了两个操作:
第一声明了一个结构体名为 tagMyStruct
tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct 关键字和 tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。
我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一
1 struct tagMyStruct 2 { 3 4 int iNum; 5 6 long lLength; 7 8 };
第二给该结构体起了个别名叫 MyStruct
1 typedef struct tagMyStruct MyStruct;
因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。
当然,我们有时还会看到如下定义:
typedef struct student { char name[N]; int age; char * sex; }std,*pt;
这时是不是感觉有点奇怪,究竟std是结构体的别名,还是*pt是结构体的别名呢?这就是我今天要讲的重点。
上面的代码相当于执行了三步操作:
第一步:定义结构体
struct student { char name[N]; int age; char * sex; }std;
第二步:给结构体重命名
typedef struct student std;
第三步:给结构体指针类型重命名
typedef student struct * pt;
这时,我们可以用pt来声明结构体指针类型的变量了,不用再写 struct student * kk; 直接写 pt kk; 简单明了。
下面给个简单的实例:
1 /* 2 * 程序名称:typedef 的简单实例 3 * 4 * Veis声明。 5 */ 6 #include <stdio.h> 7 #include <string.h> 8 #define N 20 9 typedef struct student 10 { 11 char name[N]; 12 int age; 13 char * sex; 14 }std,*pt; /*这里的 pt 相当于一个 struct student * 类型;而 std 则是给结构体student起的别名*/ 15 void main() 16 { 17 /*变量声明*/ 18 pt p; /*语句 struct student * p; 与语句 pt p; 等价*/ 19 std st1; 20 21 /*变量初始化*/ 22 strcpy(st1.name,"alen"); 23 st1.age = 15; 24 st1.sex = "male"; 25 p = &st1; 26 27 /*打印输出*/ 28 printf("\t\t\tStudent‘s Informations\nname:%s\nage:%d\nsex:%s\n\n",p->name,p->age,p->sex); 29 }
PS:心动不如行动,看完自己尝试去写,只有去写去思考,你才能更好的理解和掌握一种东西。
本文作者能力有限,若本文有什么讲错的地方欢迎指出,共同进步。-----------------Veis
标签:ora ati div ring char 使用 stat void 操作
原文地址:http://www.cnblogs.com/veis/p/7127784.html