聚合数据类型:数据和结构。
结构是一些值的集合。这些值称为它的成员。但一个结构的各个成员可能具有不同的类型。
而数组是相同类型的元素的集合,它的每个元素是通过下标引用或指针间接访问来选择的。
数组元素可以通过下标访问,这只是因为数组的元素的长度相同。而在结构中,由于一个
结构的成员可能长度不同。所以不能使用下标来访问它们。相反,每个结构成员都有自己
的名字,它们是通过名字访问的。
结构声明:
在声明结构时,必须列出它包含的所有成员。这个列表包括每个成员的类型和名字。
struct tag {member-list} variable-list;
所有可选不放呢不能全部省略,它们至少要出现两个。
注意末尾符号;
struct {
int a;
char b;
float c;
}x,y[20],*z;
【警告】这三个声明被编译器,当作是两种截然不同的类型,即使他们的成员列表完全相同,
也不同相互赋值。例如:
z=&x;是非法的。
也就可以这样声明:
struct SIMPLE{
int a;
char b;
float c;
};
这个声明为创建任何变量,SIMPEL现在是一个制造不同形状“甜饼”的机器。
struct SIMPLE x;
struct SIMPLE y[20], *z;//变量名。
也可以使用typedef创建一种新的类型。如下所示
typedef struct{
int a;
char b;
float c;
}Simple;
【注意】:现在Simple是个类型名,而不是一个结构标签,所以后续的声明可能像下面这个样子。
Simple x;
Simple y[20],*z;
结构成员还可以是其他结构,如下例子:
struct COMPLEX{
float f;
int a[20];
long *lp;
struct SIMPLE s;
struct SIMPLE sa[20];
struct SIMPLE *sp;
};
一个结构的成员的名字可以和其他结构的成员的名字相同,所以这个结构的成员a并不会与struct SIMPLE s的
成员a冲突。