结构体变量

来源:互联网 发布:mac电脑连接电吉他 编辑:程序博客网 时间:2024/06/07 03:25

一、结构体类型的定义

结构体是一种新数据类型,属构造类型,它由若干类型各异的“成员”组成;描述这些“成员”可以使用任何基本数据类型,甚至是另外一种构造数据类型都行。

其实,从本书开篇,就在定义变量,下边的语句我们已经习以为常了:

                                                              int  i;

我们用整数类型去定义了一个变量i,之所以能这样,是因为int类型是基本类型,C语言系统已经定义好了的。而结构类型是程序员自己定义的,是对C语言基本数据类型的扩充,可以理解为是程序员发明的,所以“要定义结构类型的变量,必须先定义结构类型本身”就顺理成章了。

区别结构体名、结构变量名,掌握通过结构变量访问其成员的方法是学好本章的关键。

打个比方,我们定义一种结构类型(person)描述青年,青年由几个基本属性(即成员)决定(namecolorsexage等),显然描述这些属性只需要用到基本数据类型就够了。我们可以用这个结构类型person去定义一个具体的青年人zhangshanzhangshan则称为结构变量名。如果有100个青年人组成了班,那么我们可以把他们定义为一个数组class_one[100],该数组称为结构数组。

每一种具有不同成员的结构体就是一个新的数据类型,所以,在说明和使用结构体之前必须作结构类型的定义。定义结构类型使用关键字“struct”。

下边几行定义结构类型person,并用该类型定义结构变量zhangshan和结构数组class_one[100]

struct person

{

  char name[20];   /* 定义姓名 */

  char color[10];   /* 定义肤色 */

  char sex[2];      /* 定义性别 */

  int age;         /* 定义年龄 */

};     /* 注意这里有分号 */

struct person zhangshan, class_one[100];

现在,再定义一个商品结构类型goods,设商品包含属性有:商品名、商品代码、厂商、单价、质量。把相同类型的成员定义在一行,goods可定义如下:

 struct  goods

 {

char goodsname[15], goodcode[15], companyname[30] ;

float price, weight ;

} ;

struct 是结构体的关键字,goods是结构体名,花括号内的所有变量是这个结构体的成员。这种写法虽然节省了程序行,但降低了可读性,故不建议初学者这样写。

综上,结构体类型简称为结构类型,其定义格式为:

struct <结构体名>

{

   类型 成员1;

   类型 成员2;

   ……

};

二、结构体类型变量的定义

结构体变量简称为结构变量,它由结构类型定义,有三种定义方法。下面以定义结构类型book和结构变量mybookstorybook为例说明之。

1. 先定义结构类型,再定义结构变量。

  structbook     /*  定义结构体类型 */

{

char bookname[20];

float price;

char publisher[20];

char author[10];

} ;

struct book mybook, storybook;

用这种方法定义结构变量,是最常用的方法,但须注意不能省略关键字“struct”。还可以在定义结构变量的同时给它的成员赋初值。如:

  structbook     /*  定义结构体类型 */

{

char bookname[20];

float price;

char publisher[20];

char author[10];

} ;

struct book mybook = { “maths”, 24.7, “电子社”, “zhao” },storybook;

则,mybook变量的price = 24.7

2. 定义结构类型的同时定义结构变量。

  structbook     /*  定义结构体类型 */

{

char bookname[20];

float price;

char publisher[20];

char author[10];

} struct bookmybook,storybook;

3. 不定义结构类型,直接定义结构变量。

  struct         /*  不定义结构类型名 */

{

char bookname[20];

float price;

char publisher[20];

char author[10];

} struct bookmybook,storybook;

需要说明的是,当某结构类型的成员又是另外一个结构类型时,称嵌套定义,其定义方法如下:

 struct brith_date

 {

int  month ;

int  day ;

int  year ;

} ;

 struct

{

  char name[10] ;

 charaddress[30];

 chartel[12];

 int age;

 struct data birthday;

char sex[3];

} student_01, employee;

 此例直接定义了student_01employee两个变量,但是没有定义此结构体的名字,因此不能再定义与student_01employee同类的其它结构变量了!如下行定义是错误的:

truct boy, girl;