1、建立结构声明
//该声明描述了一个由两个字符数组和一个float类型变量组成的结构。
//该声明并没有创建实际的数据对象,只是描述了该对象由什么组成
//(有时候我们成为模板)
struct book //book是标记名,是可选的。
{
char title[MAXTITL];
char author[MAXAUTL];
float value;
}; //这样就创建了一个结构模板。
//分析:关键字:struct 表明跟在其后的是一个结构,后边是一个可选的标记(本例中是book)。
//我们声明一个结构体变量
struct book library;//把library声明为一个使用book结构的变量。
注意:
1.1:这个声明可以放在所以函数的外部,也可以放在函数的内部。如果把该声明放在函数内部,它的标记只限于该函数内部使用。如果把声明放在函数外部,那么该声明之后的所以函数都可以使用它的标记。
1.2:结构的标记名是可选的。
2.定义结构变量
结构有两层含义:一就是“结构布局”,在1中讨论了,结构布局告诉编译器如何表示数据,但是它并未让编译器为数据分配空间。二就是创建一个结构变量。
struct book library;//创建一个结构体变量library。
//当编译器执行这行代码的时候就创建了一个结构变量library,编译器使
//用book模板为该变量分配空间。
注意:
2.1:在结构声明中,struct book所起的作用相当于一般声明中的int 或者float等。可以定义struct book类型的变量,或者甚至是指向struct book类型结构的指针。
struct book doyle, panshin, *ptbook;
就计算机而言,下边的声明:
struct book library;
是以下声明的简化:
struct book{//有结构标记
char title[MAXTITL];
char author[MAXAUTL];
float value;
}library;
换句话说:就是声明结构的过程和定义结构变量的过程可以组合成一个步骤。
struct {//无结构标记
char title[MAXTITL];
char author[MAXAUTL];
float value;
}library;
有标记与无标记的区别:如果要多次使用结构模板,那么就要使用有标记的形式。
3.初始化结构
struct book library =
{
"luotuoxiangzi",
"laoshe",
15.6
}
注意:
3.1:我们的初始化也是在一个大括号中完成的,大括号中是一个初始化列表,各个初始化项用逗号隔开。
4.访问结构成员
可以使用(.)访问结构中的成员。例如:library.value。
scanf("%f",&library.value);//完全没有问题,.的优先级比&高。
5.结构的初始化器(可以初始化结构中的一部分)
//例如:
struct book surprise = {.value = 99.88};//只初始化一个成员变量。
struct book gift = {
.value = 23.54,
.author = "ABCD",
.title = "EFGH"
};//按照任意顺序初始化
注意:
5.1:与普通变量一样,对特定成员的最后一次赋值才是它实际的值。
6.结构数组
struct book library[MAXBKS]; //book类型结构的数组。
注意:
6.1:library不是变量,只是一个数组名,而library[1]等等才是变量。如果要访问,那么library[0].value……此次类推。