结构体变量

一、结构体类型的定义

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

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

                                                                int  i;

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

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

打个比方,我们定义一种结构类型( person )描述青年,青年由几个基本属性(即成员)决定( name color sex age 等),显然描述这些属性只需要用到基本数据类型就够了。我们可以用这个结构类型 person 去定义一个具体的青年人 zhangshan zhangshan 则称为结构变量名。如果有 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 和结构变量 mybook storybook 为例说明之。

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

    struct book      /*  定义结构体类型 */

{

char bookname[20];

float price;

char publisher[20];

char author[10];

} ;

struct book mybook, storybook;

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

    struct book      /*  定义结构体类型 */

{

char bookname[20];

float price;

char publisher[20];

char author[10];

} ;

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

则, mybook 变量的 price = 24.7

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

    struct book      /*  定义结构体类型 */

{

char bookname[20];

float price;

char publisher[20];

char author[10];

} struct book mybook, storybook;

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

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

{

char bookname[20];

float price;

char publisher[20];

char author[10];

} struct book mybook, storybook;

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

  struct brith_date

  {

int  month ;

int  day ;

int  year ;

} ;

  struct

{

   char name[10] ;

  char address[30];

  char tel[12];

  int age;

  struct data birthday;

char sex[3];

} student_01 , employee ;

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

truct boy, girl;


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值