在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
在开始C语言学习的时候,结构体是比较让人头疼的,因为它不是像基本的数据类型那样通俗易懂,其实结构体并不难理解,结构体的出现源于其本身的现实意义。比如现在要定义一个学生类型,基本数据类型当然不能够解决,所以就有了结构体。一般我们在定义数据结构时,结点的类型我们就定义为结构体,下面先写一个学生的结构体类型。
struct student
{
char Name[]; //姓名
char Number[]; //学号
int Age; //年龄
char Sex; //性别 'M' 男 'F' 女
}stu;
1、结构体声明
(1)匿名声明
struct
{
int width;
int height;
}block;
上面定义了一个匿名的结构体,有一个结构体变量block,这个block也是一种变量类型,可以看成是block类型。这种变量的属性就是它的成员变量width和height。若变量block是在全局域则block内的成员变量被默认初始化。这个变量是真实存在的,内存中是分配了空间的。
不同的匿名结构体变量不可以进行比较,因为它们的类型不同,比较是没有意义的。
(2)显示声明
struct Block
{
int width;
int height;
}block;
声明了一个struct Block结构体,还有一个这种结构体的block变量。可以定义一个它的对象,struct Block b1,
还有一种显示声明的形式:
typedef struct Block
{
int width;
int height;
}block;
和上面一样,只是在定义对象时可以简单的Block b1。
注意在定义结构体类型时可以在结构体内部使用结构体变量,但是要避免循环定义。
2、结构体赋值
typedef struct Person
{
int Age;
char Sex;
}person,per*;
person per1;
若Person定义在全局,则成员变量赋默认值。
初始化:person per1 = {10, ‘M’};
赋值:
person per1;
per1.Age = 10;
per1.Sex = 'M';