1. 结构体
a) 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构
b) 结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问
c) 举个栗子好啦。如果想打印图书馆中每本书的各种信息:书名、作者、出版商、页数、版权日期、册书及价格。可以用字符串数组存储书名、int数组存储页数、float数组存储价格,但很复杂。结构既可以包括字符串又可以包括数字还可以分别储存这些信息
#include <iostream> #define MAXTITL 41 //书名的最大长度 #define MAXAUTL 31 //作者名的最大长度+1 struct book{ char title[MAXTITL]; char author[MAXAUTL]; float value; }; //结构模板结束,有个分号 int main(){ struct book library; //把library声明为book类型的变量 printf("Please enter the book title.\n"); gets(library.title); //访问title部分 printf("Now enter the author.\n"); gets(library.author); printf("Now enter the value.\n"); scanf("%f",&library.value); printf("%s by %s: $%.2f\n",library.title,library.author,library.value); printf("%s: \"%s\" ($%.2f)\n",library.author,library.title,library.value); printf("Done.\n"); return 0; }
2. 结构体定义
a) 结构声明是描述结构如何组合的主要方法。首先使用关键字struct,它表示接下来是一个结构。后面是一个可选的标记(在此栗中是单词book),它是用来引用该结构的快速标记。在结构声明中,接下来是一对花括号括起来的结构成员列表。每个成员变量都用它自己的声明来描述,用一个分号结束描述。如,title是一个拥有MAXTITL个元素的char数组。结束花括号后的分号表示结构设计定义的结束
b) 第一种定义方式:
struct{ char title[MAXTITL]; char author[MAXAUTL]; float value; }library; struct book library; //将library声明为一个使用book结构设计的结构变量
c) 第二种定义方式:
struct book{ char title[MAXTITL]; char author[MAXAUTL]; float value; }library; //在定义之后跟变量名声明结构的过程和定义结构变量的过程可以被合并成一步。下面的声明是以上声明的简化。
struct book library;
d) 第三种定义方式:
struct{ //没有标记
char title[MAXTITL];
char author[MAXAUTL];
float value;
}library;
声明结构的过程和定义结构变量的过程可以被合并成一步。将声明和变量合并在一起,不需要使用标记。然而,如果想多次使用一个结构变量,就需要使用带有标记的形
式
3. 初始化结构
a) 要初始化一个结构变量,可以使用与初始化数组相似的语法。使用一个用花括号括起来的、逗号分隔的初始化项目列表进行初始化。每个初始化项目必须和要初始化的结 构成员类型相匹配。因此,可以将title成员初始化为字符串,将value成员初始化为数字。成员变量的定义可以随声明进行
struct book library={ "The Pirate and the Devious Damsel", "Renee Vivotte", 1.95; };
b) 结构就像是一个“超级数组”,里面的一个元素可以是char类型,下一个可以是float类型,下一个可以是int数组。使用下标可以访问一个数组的各个元素;用结构成员运算 符点(.)可以访问结构中的各个成员。例如,library.value指library的value部分,可以像使用任何其他float变量一样使用library.value(library.value是float类型)。类似 的,可以像使用一个char数组那样使用library.title。在本质上,.title、.author和.value在book结构中扮演了下标的角色
library.title="The Pirate and the Devious Damsel"; library.author="Renee Vivotte"; library.value=1.95;
c) 结构的指定初始化项目的语法与数组的指定初始化项目类似。结构的指定初始化项目使用点运算符和成员名。例如,只初始化book结构的成员value,可以这样做:
struct book library={.value=10.99};还可以按照任意顺序使用指定初始化项目:
struct book gift={ .value=25.99,
.author="James Broadfool",
.title="Rue for the Toad"};
d) 对特定成员的最后一次赋值是它实际获得的值
struct book gift={.value=18.90, .author="Philionna Pestle", 0.25};这将把值0.25赋给value,因为它在结构声明中紧跟在author成员之后,新的值0.25代替了早先的赋值18.90