2020-12-20

建立结构声明

struct book
{
  char title[MAXTITL];
  char author[MAXAUTL];
  float value;
};

定义结构变量

结构包括结构布局和结构变量两部分的含义,例如,在

struct book dickens;

中,结构变量是dickens,结构布局是book。在结构变量的声明中,struct book所起的作用相当于一般声明中的int或float,例如。可以定义两个struct book类型的变量,甚至是指向struct book类型的指针:

struct book doyle,panshin,*ptbook;

对于创建图书馆目录的例子,下面的声明:

struct book library;

是以下声明的简化:

struct book 
{
 char title[MAXTITL];
 char author[AXAUTL];
 float value;
}library;

也就是说,声明结构的过程和定义结构变量的过程可以组合成一个步骤。

初始化结构

一般使用一对花括号中括起来的初始化列表进行初始化,各初始化项目用逗号分隔,初始化一个静态存储期的结构,初始化列表中的值必须是常量表达式。

访问结构成员

使用结构成员运算符——(.)访问结构中的成员,例如,library.value即访问Library的value部分,可以像使用任何float变量那样使用library.value.虽然library是一个结构,但是library.value是一个float类型的变量。例如,scanf("%f",·····),需要一个float变量类型的地址,而&library.float正好符合这个要求,.比&的优先级高,因此这个表达式和&(library.float)一样。

结构的初始化器

结构的指定初始化器使用点运算符和成员名标识的元素

结构数组

声明结构数组

struct book library[MAXBKS];

以上代码把library 声明为一个内含MAXBKS个元素的数组。数组的每个元素都是一个book类型的数组,因此,library[0]是第一个book类型的结构变量,library[1]是第二个book类型的结构变量····,数组名library本身不是结构名,它是一个数组名,该数组的每个元素都是struct book类型的结构变量。
也就是library[0]中包含了library[0].title, library[0].author, library[0].value。

标识结构数组中的成员

为了标识结构数组中的成员,可以采用访问单独结构的规则:在结构名后面加一个点运算符,再在点运算符后面写上成员名。

library[0].value
library[1].author
library  //一个book结构的数组
library[2]   //一个数组元素,该元素是book结构
library[2].title   //一个char数组(library[2]的title成员)
library[2].title[4]  //数组中library[2]元素的title成员的一个字符
while(getchar()!='\n')
  continue;  /*清理输入行*/

上述的代码弥补了scanf()函数遇到空格和换行符就结束读取的问题。

指向结构的指针

声明和初始化结构指针

struct guy * him;

指针him现在可以指向任意现有的Guy类型的结构。
例如,如果barery是一个guy类型的结构变量,可以这样写:

him=&barery;

和数组不同的是,结构变量名不是结构的地址,所以要在结构变量名之前加上&运算符。

用指针访问成员

指针him指向结构变量fellow[0],如何通过him 获得fellow[0]成员的值,

第一种方法是:

使用 -> 运算符
如果him==&bareny,那么him->income即是bareny.income
如果him==&fellow[0],那么him->income即是fellow[0].income

第二种方法是:

如果him==&fellow[0]那么him==fellow[0],因为&和是一对互逆运算符,因此,可以做以下替代:fellow[0].income==(*him).income必须使用圆括号,因为.运算符比星号运算符的优先级高。

其他结构特性

getinfo()函数把结构的信息从自身传递给main().返回类型是void.
makeinfo()函数使用双向传输方式传送信息。返回类型是void.
showinfo()函数使用一个指针定位待打印的信息。因为该函数不改变数组的内容,所以将其声明为const。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值