C Primer Plus 结构体 struct 详解 常见用法

来源:互联网 发布:linux双网卡同一网段 编辑:程序博客网 时间:2024/06/05 04:41

1.      结构体

a)        结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构

b)        结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问

c)        举个栗子好啦。如果想打印图书馆中每本书的各种信息:书名、作者、出版商、页数、版权日期、册书及价格。可以用字符串数组存储书名、int数组存储页数、float数组存储价格,但很复杂。结构既可以包括字符串又可以包括数字还可以分别储存这些信息

#include <iostream>#define MAXTITL 41//书名的最大长度#define MAXAUTL 31//作者名的最大长度+1struct 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






























原创粉丝点击