结构是将彼此相关的、类型不同的数据组合在一起的构造数据的类型,它是由若干个成员组成,每一个成员的数据类型可以是基本数据类型,也可以是构造类型,在使用某个结构之前必须先声明它,即根据需要构造它。声明结构类型的一般形势为:

struct 结构名
{类型名 成员名1;
 类型名 成员名2;
 类型名 成员名3;
 ......
 类型名 成员名n;};

结构数组的定义(三种形式)

1.先声明结构类型,在定义结构数组
struct 结构名
{成员列表;
};
struct 结构名 数组名【元素个数】【,数组名【元素个数】,······】;
2.声明结构类型的同时定义结构数组
struct 结构名
{成员列表;
}数组名【元素个数】【,数组名【元素个数】,...】;
3.直接定义结构数组
struct 
{成员列表;
}数组名【元素个数】【,数组名【元素个数】,...】;
 例题
struct books
{int bno;
char bname[20];
char field[10];
char author[10];
char publisher[30];
float price;
};
struct books book[5];

结构数组book共有5个元素,book【0】-book【4】,每个数组元素都具有struct books的结构类型。

结构数组初始化

结构数组在定义的同时也可以初始化,可进行部分初始化或全部初始化。结构数组初始化一般形式为

struct 结构名 数组名【元素个数】={初值表列};

在对结构数组进行初始化时,需遵循数组的初始化规律,可对其中的部分数组元素初始化,但是对结构数组元素中的每个成员都要进行初始化。

在对结构数组进行全部初始化时,初值的个数应当与结构数组的元素个数以及每个数组元素的成员个数相匹配。为了增强程序的可读性,最好用大括号将每一个数组元素的初值括起来。

当对结构数组的全部元素进行初始化时,可以省略数组的长度,系统根据初始化数据的多少来确定数组的长度。如

struct books book[]={
{101,"changuage","computer","xw","rmydpress",39},
{102,"vbprogramming","computer","zys","qhdxpress",39},
{103,"java","computer","thq","qhdxpress",26}
};

根据初值可知结构数组的book的长度为3,即book共有3个元素book[0]-book[2].

结构数组的使用

结构数组的使用也是通过引用结构数组元素的成员进行的。结构数组元素中成员的访问方法与结构变量成员的访问方法类似,通过成员运算符“.”来引用。另一方面,由于可以通过数组名以指针法形式来引用数组元素,因此对于结构数组元素成员的引用可以有如下集中形式:

1.结构数组名【下标】.成员名
2.(*(结构数组名+下标)).成员名
3.(结构数组名+下标)->成员名

其中,形式二中最外面的括号不可少,因为运算符"."的优先级高于“*”,如果不加括号,则“*(结构数组名+下标).成员名”相当于 “  *((结构数组名+下标).成员名) ”,含义发生了变化,从而会产生错误。

3中的“->”称为指向成员运算符,其优先级与成员运算符“.”相同,且结合方向均为从左到右。

结构数组成员的使用方法与同类型的结构变量相同。

#include<stdio.h>
struct books {
	int bno;
	char bname[20], field[10], author[10], publisher[30];
	float price;
};
int main()
{
	struct books book[5] = {
		{101,"clanguage","computer","xw","rmydpress",39},
		{102,"vbprogramming","computer","zys","qhdxpress",39},
		{103,"jave","computer","mj","jxgypress",29.8},
		{104,"linearalgebra","math","chc","dzgypress",34},
		{105,"clanguage","computer","thq","qhdxpress",26}
	};
	printf("%s\t %.2f\n", book[2].bname, book[2].price + 10);
	printf("%s\t %.2f\n", (*(book + 2)).bname, (*(book + 2)).price + 10);
	printf("%s\t %.2f\n", (book + 2)->bname, (book + 2)->price + 10);
	return 0;
}

运行结果:说明,对于程序中定义的数组结构book,

book[2],bname、(*(book+2)).bname、(book+2)->bname      均表示结构数组book的第三个元素book[2]的成员bname,在printf()函数中分别使用这三种形式输出book[2]的成员bname以及book[2]的成员price的值加10后的结果。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐