C结构体简介

当然,在学习结构体之前,你会很自然的想到使用如下的变量来描述
     
    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的语法一样了.

上一篇: 有了malloc/free为什么还要new/delete ?   下一篇: C语言的宏定义函数

提交疑问

回顶部