一、结构是什么?
结构体是一种可以储存多个数据的集合,像数组一样,你可以把多个数据储存到一个变量里,但与数组不同的是,结构体中的成员(和数组元素一样,在结构体中我们称之为成员)可以是不同类型的。
结构体和数组比较:
1、数组中所有元素的类型相同,但结构体允许不同;
2、数组通过 数组名[下标]或者指针来访问其中的元素,但结构体通过成员名来访问其成员;
3、数组中有几个元素就给它分配几个元素大小的空间,但结构体分配的空间大小并不是所有成员大小之和。
二、声明
struct tag
{
member-list;
}variable-list;
如上是结构体声明的基本格式,其中tag、member-list、variable-list至少要出现两个。
下面有几个例子:
struct
{
int a;
char b;
double c;
}x;
这个声明创建了一个叫x变量,它含有三个成员;
struct
{
int a;
char b;
double c;
}y,*p;
这个声明创建了一个结构体指针,但是注意,虽然上面两个结构体具有完全相同的成员,但是它们却是两种截然不同的类型,所以下面这条语句是错误的:
p = &x;
但是下面这个确实正确的,因为它们是同一种类型:
p = &y;
这是否意味着每次创建一个结构体类型的变量时都需要使用一个单独的声明呢?并非如此。tag允许我们直接创建结构体变量:
struct A
{
int a;
char b;
double c;
};
如上我们没有创建任何变量,但是它允许我们在下文创建变量,你可以这样使用它:
struct A x;
这里我们创建了一个x变量;
有时你会觉得使用struct A有点麻烦,这里有个小技巧:
typedef struct A
{
int a;
char b;
double c;
}simple;
使用typedef关键字可以给该结构体起一个新的名字,所以你就可以这样使用它了:
simple y;
simple *p;
simple z[];
上面分别创建了一个结构体变量y、指向结构体的指针p、结构体数组(它的每个元素都是一个结构体)。
还有一些关于结构体更复杂的用法,将在后面的博文中讨论。
成于坚持,败于止步!