BBS水木清华站∶精华区

发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test 
标  题: 星星流讲座 0043 
发信站: ☆清华电机☆ (Thu Jul 20 21:56:00 1995) 
 
 
第 7 讲 之 1            使用者自定结构 
                        Topic: Structures 
 
现在来同各位讨论有关使用者自定结构的课题。什麽是使用者自定 
结构 (structure,以下简称结构) 呢?简单的来说,它是依据使用 
者的需求,由使用者自己定义的一种资料的记录 (data record)。 
比方说,我们想要制作一份通讯录,那麽每一笔资料可能就包含了 
姓名、地址和电话三个栏位,这个时候就可以用结构来表示: 
 
        struct record 
        { 
            char name[20]; 
            char address[80]; 
            char tel[20]; 
        };      /* 注意这最後的分号 */ 
 
我们称 record 为一种结构的型式 (structure type),而它所包含 
的 name、address 以及 tel 为这种结构型式的元素 (member)。 
 
结构在 C 语言中的宣告方法很简单,就是: 
 
        struct 结构名称 
        { 
            元素1; 
            .... 
        } 结构变数1, 结构变数2, ... ; 
 
结构可以是一个或多个相同或不同资料型态变数的集合,例如: 
 
        struct single 
        { 
            int only_one;       /* 这时候 single 就相当於 int */ 
        }; 
 
        struct score 
        { 
            long id;            /* 学号 */ 
            char name[20];      /* 姓名 */ 
            float grade;        /* 分数 */ 
        } studentA, studentB, studentC; 
 
上例中 score 这个结构是用来登载学生的成绩用的,而 studentA、 
studentB 以及 studentC 就是属於 score 这种类型的结构变数。 
结构可以当做变数的资料型态,比方说我们如果要增加一个 
studentD 的变数,这时候我们只需宣告: 
 
        struct score studentD; 
 
就可以得到一个新的结构变数 studentD,它属於 score 这种类型。 
 
结构变数也可以在宣告的时候直接给定初值,例如: 
 
        struct point 
        { 
            int x; 
            int y; 
        }; 
 
        struct point A = { 2, 3 }; 
 
可以在宣告 A 这个结构变数时就依序结定它内容里各个变数 
的初值,上例中就是给定 A 这个结构变数中的 x = 2, y = 3;。很显 
然地这样子给定字串的初值会有危险,这我们在前面已经提到过了。 
 
若是我们想要单独地操作结构中的变数,像上例中 A 这个变数里的 x 
那该怎麽办呢?你只要使用如: 
 
        A.x = 4; 
 
这种型式,就可以自由地操作了。 
 
结构里的元素也可以是其他的结构,例如: 
 
        struct circle 
        { 
            struct point center; 
            int radius; 
        } cir; 
 
这个时候如果要取用 cir 的圆心的 x 坐标要怎麽办呢?你只需要使用 
如: 
 
        cir.center.x = 4; 
 
这种型式,就可以自由地操作了。 
 
-- 
本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。 
你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。 
原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。 
未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。 
其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。 
对本文有任何疑问或意见请 mail 给 ax.bbs@bbs.ee.nthu.edu.tw,谢谢。 
 
 

BBS水木清华站∶精华区