C结构体应用全攻略

  • 格式:doc
  • 大小:175.50 KB
  • 文档页数:30

下载文档原格式

  / 30
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在学习结构体之前,你会很自然的想到使用如下的变量来描述:

name, height, weight, strong, modfile。

好了,现在来给Kula和K分别进行描述,你就需要在变量名上加以区分。对于Kula你有了

Kula_name, Kula_height, Kula_weight, Kula_strong, Kula_modfile 对于K,你有了

K_name, K_height, K_weight, K_strong, K_modfile

好,设想你现在要制作KOF2003了,我们需要一个函数根据这些信息在战斗中评价两位选手,这个函数看上去像是这样

int value(char *name, int height, int weight, int strong, char *modfile);

当然在实际测试中一个人物的信息可能不止这几个,也许他有30个之多,我相信你是不会写一个有30个参数的函数的(除非你为Microsoft工作)。更糟糕的是,如果由于版本更新发现30个参数里有15个是多余的,在修改了函数定义之后,你还要修改无数的不只位置函数调用。汗!

现在,结构体来救你了(e文:the struct comes to rescue)。看看如何用结构体定义一个拳皇人物吧。首先我们定义一个结构体类型:

struct FIGHTER {

char *name; /*元素1*/

int height; /*元素2*/

int weight; /*元素3*/

int strong; /*元素4*/

char *modfile; /*元素5*/

};

这个类型叫FIGHTER,他和你用的int在语法上是一样,他们都是类型。正如你使用int声明变量一样,你可以用FIGHTER声明变量。FIGHTER有一些比int 特殊的地方,他是结构体。所以声明变量时,你给跟TC提这件事(在FIGHTER 前加上struct关键词)。声明变量的方法如下:

struct FIGHTER Kula, K, Iori, Athena;

好了,你定义了很多FIGHTER变量。那么如何使用他们呢。对于设置一个人物我们可以这样:

Kula.height = 1.65;

Kula.weight = 49;

Kula.strong = 75;

这里,height,weight,strong是Kula内的元素。这就好像同一规格的不同书包一样。Kula是这种规格书包的一种,而height,weight,strong就是书包里袋子的名称。自然书包K里height袋子和书包Kula里height袋子是两个完全独立的袋子,他们互不干扰。

你注意到了Kula和height之间有一个点,专业一点的称呼叫成员运算符(member operator)。当然我还是叫她"点"。

现在回到value函数的问题,我们不再需要那么多参数了。我们只要

int value(struct FIGHTER fighter);

这样,在评价Kula的时候我们使用的是value(Kula)而不是什么

value(Kula_height, Kula_weight, ......, 汗!);

一定会发现结构对于描述一样带有很多属性的东西有天生的优越性。比如 struct POINT {

int x;

int y;

};

struct RECT {

int left;

int top;

int bottom;

int right;

};

.....

使用结构体编程可以让你尽快熟悉OOP(面向对象程序设计)。

不过,...嘻嘻,你没觉得每次在声明结构体时的语法中有个struct在前面很不爽

struct RECT rt;

我想让他像声明int型一样简单,打个RECT rt就行了那多好。于是你就打了一个

RECT rt;

然后编译器给了一个惊人的回答:

Declaration syntax error 定义语法错误。

希望没有破灭!现在,typedef comes to rescue(c文:typedef来帮忙了)记得我们可以用typedef定义类型别名吧,比如unsigned int太长了,不好打,我们用

typedef unsigned int UINT;

来定义和unsigned int的同义词UINT,这样一来unsigned int a 和 UINT a就是一回事了。现在来看看这个语法结构。

typedef struct POINT PT;

呵呵,看到了吧PT和struct POINT 这么长的一个东西成了同义词了。以后直接用PT就可以了比如struct POINT point就可以用PT point代替了,爽吧!

其实,还有更爽的,我们把typedef和struct定义结合在一起。

typedef struct POINT {

int x;

int y;

} PT;

更简单!这种做法是很多程序里惯用的。当然,我们用更好的方法给变量命名,国际上一般采用这样的命名方法

typedef struct tagPOINT {

int x;

int y;

} POINT;

这样我们就可以直接用 POINT pt1, pt2;定义POINT型的变量了。呵呵看起来是不是和int的语法一样了。

一、结构体入门——定义与成员

1. 结构定义

在C中,结构也是一种数据类型,可以使用结构变量,因此,像其它类型的变量一样,在使用结构变量时要先对其定义。

定义结构变量的一般格式为:

struct 结构名

{

类型变量名;

类型变量名;

...

} 结构变量;

结构名是结构的标识符不是变量名。