资源描述:
《c语言基础教程 第八章 结构》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C语言基础教程8.1.1结构和结构变t的定义 结构是一种数目固定、类型不同的若干个变量的有序的集合。结构变量是指具有某种结构类型的变量,定义结构变量之前应该先定义某种结构类型,有了这种结构类型后,再定义具有这种结构类型的结构变量、指向结构变量的指针以及结构数组等。结构数组是指数组元素为结构变量的数组。 下面是定义结构类型即结构模式的格式; struct<结构名)不 <结构成员说明> }; 其中,struct是关键字。(结构名)同标识符,(结构成员说明>是给出该结构模式的若干个成员,包含各个成员的名字(即变量名)和类}#o C语言中允许
2、出现的各种类型的变量都可以作结构成员,包含int型,float型,double型,char型变量,以及指针、数组、联合变量等。结构变量和指向结构变量的指针也可以作结构的成员,即结构定义是可以嵌套的。但是,某类结构的结构变量可以是另一类结构的结构成员,而不可是本身结构的结构变量。指向结构变量的指针可以是本身结构的成员。 例如: structcard { intpips charsuit; }; 这是一个结构模式,其结构名是card,它有两个成员:一个是int型变量pips,另一个是字符型变量suit.该结构是用来描述一张扑克牌的,
3、pips表示该牌的点数,而suit表示该牌的花色,其花色用字符's(黑桃),'h'(红桃).'d'(方块)''c'(梅花)来表示。任何一种结构模式都是对某种客观事物的抽象。 在结构模式已定义好后,可以用下述格式来定义具有某种结构模式的结构变量。 Srruct<结构名><结构变量名表>; 其中,<结构名>是已被定义的某种结构模式,(结构变量名表)中可有若干个结构变量、指向结构变量的指针、结构数组等。它们之间用逗号分隔。例如: structcardc1.c2,*pc,cc[52]; 其中,c1和c2是具有card结构模式的结构变量,pc是指
4、向具有card结构模式的结构变量的指针,cc是结构数组名,它有52个元素,每个元素是一个具有card结构模式的结构变量。 由此可见,定义一个结构变量可以分两步,先定义好一个结构模式,再定义具有这种结构模式的结构变量。 在名写J、可以在定义结构模式后,马上定义结构变量,其格式如下: StTUCI<结构名> <结构成员说明> } <结构变量名表>; 例如: structcard { intptps}; charsuits ).c1,c2,*pc,cc[52]; 这种连起来定义与前面分开定义是等价的。如果所要定
5、义的结构变量一次性定义完,即不再出现用这种结构模式来定义新的结构变量,则可将该结构模式的结构名省略,即为无名结构。用这种结构只能一次定义所有的结构变量。例如: struct intpips; charsuit; cl.c2,*pc,cc[52]; 下面举例说明结构定义的嵌套,即用另一个结构的结构变量作该结构的成员。 structdate { insday,month,year: charrnon name[4]; ); struct;student { char*name charsex intol
6、d; atructdatebirthday; } 这里有两个结构模式date和student.在date结构中,使用了char型数组作结构成员,在student结构中,使用了char型指针作结构成员,又使用结构变量birthday作结构成员。structstudentWang,Li,Zhang,其中,Wang*Li,Zhang是3个具有student结构模式的结构变量。该变量将具有student 结构模式所具有的4个结构成员,其中有一个是结构变量作成员。 下面举一个指向自身结构的指针作结构成员的例子,这又是一种结构定义的嵌套。 st
7、ructnode { int floatb. structnode*P; 其中,P是指向该结构的结构变量的指针,它作为结构成员,又称指向自身结构的指针作该结构的成员。 最后指出,上面讲过的结构名、结构成员名和结构变量名是三个完全不同的概念,它们允许同名。例如: streets Inta; char*b; Char*s; }s,m,*pn; 这里出现了三个S,它们分别表示不同的含义。第一次出现的s表示结构名,第二次出现的S表示某个成员名,该成员是字符指针,第三个S表示结构变量名。C语言基础教程8.1.2结构变量
8、成员的表示 结构变量成员的表示有如下两种方法。 1.结构变童