💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#### 20. 数据结构 C/C++ 数组允许定义可存储相同类型数据项的变量,但是**结构**是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。 **定义结构:** 为了定义结构,您必须使用 **struct** 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下: ~~~ struct type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names; 复制代码 ~~~ **type\_name** 是结构体类型的名称,**member\_type1 member\_name1** 是标准的变量定义,比如 **int i;** 或者 **float f;** 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明一个结构体类型 **Movies**,变量为 **movies**: ~~~ //定义结构 struct Movies { char title[10]; char address[30]; }movies; 复制代码 ~~~ **访问结构成员:** 为了访问结构的成员,我们使用**成员访问运算符(.)**。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。 下面的实例演示了结构的用法: ~~~ //定义结构 struct Movies { char title[10]; char address[30]; }; void test18() { //定义结构体变量 Movies movieA, movieB; //movieA 详述 strcpy(movieA.title, "叶问4"); strcpy(movieA.address, "china"); //movieB 详述 strcpy(movieB.title, "战狼2"); strcpy(movieB.address, "china"); //输出电影信息 cout << movieA.title << "\t" << movieA.address << endl; cout << movieB.title << "\t" << movieB.address << endl; } 复制代码 ~~~ > **输出:** > > 叶问4 china 战狼2 china **结构体作为函数参数:** 您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。您可以使用上面实例中的方式来访问结构变量: ~~~ //定义结构 struct Movies { char title[10]; char address[30]; }; void movieInfo(struct Movies movie); void test18() { //定义结构体变量 Movies movieA, movieB; //movieA 详述 strcpy(movieA.title, "叶问4"); strcpy(movieA.address, "china"); //movieB 详述 strcpy(movieB.title, "战狼2"); strcpy(movieB.address, "china"); //将结构体作为函数参数传递 movieInfo(movieA); movieInfo(movieB); } void movieInfo(struct Movies movie) { //输出电影信息 cout << movie.title << "\t" << movie.address << endl; } 复制代码 ~~~ > **输出:** > > 叶问4 china 战狼2 china **指针结构的指针:** 您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示: ~~~ struct Movies *struct_pointer; 复制代码 ~~~ 现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示: ~~~ struct_pointer = &Movies; 复制代码 ~~~ 为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示: ~~~ struct_pointer->title; 复制代码 ~~~ 让我们使用结构指针来重写上面的实例,这将有助于您理解结构指针的概念: ~~~ //定义结构 struct Movies { char title[10]; char address[30]; }movies; void movieInfo(struct Movies *movie); void test18() { //定义结构体变量 Movies movieA, movieB; //movieA 详述 strcpy(movieA.title, "叶问4"); strcpy(movieA.address, "china"); //movieB 详述 strcpy(movieB.title, "战狼2"); strcpy(movieB.address, "china"); //将结构体作为指针传递 movieInfo(&movieA); movieInfo(&movieB); } void movieInfo(struct Movies *movie) { //输出电影信息 // 为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符 cout << movie->title << "\t" << movie->address << endl; } 复制代码 ~~~ > **输出:** > > 叶问4 china 战狼2 china