结构体和共用体(联合体)是自定义的数据类型,常用于处理非数值型数据,使用如:链表、队列、树等。
1. 结构体定义
结构体是用其他类型构造出来的数据类型。结构体类型如下:
struct student
{
int number;
int *name;
char sex;
int age;
float score;
}
定义一个结构体变量如下:
struct student stu1;
stu1.age=32;
stu1.name="Zhong Guo";
stu1.number=06001;
stu1.sex='m';
stu1.score=87.0;
结构体变量的定义也可以在定义结构体类型的同时进行。也可以定义结构体数组类型。定义与初始化可以分开进行,也可以在定义时初始化。
2. 指向结构体的指针
指针可以指向整型、浮点型、字符型等基本类型变量,同样也可以指向结构体变量。指向结构体变量的指针的值是结构体变量的起始地址。指针可以指向结构体,也可以指向结构体数组。
在结构体定义时,通常使用关键字typedef建立已经定义好的数据类型的别名。如:
typedef struct student StuInfo; //结构体类型struct student的别名就被定义为StuInfo,这样StuInfo就成为一个结构体类型。可用StuInfo来定义结构体变量和指针变量。如:
StuInfo stu[3],*p;
也可用typedef为基本数据类型建立别名,如:
typedef int DataType; // 这样,DataType就跟int等效。
使用关键字typedef可以使程序有更好的可移植性。
3. 共用体及应用
与结构体一样,共用体也是派生的数据类型。但共用体的成员共享同一个存储空间。定义如下:
union u
{
char x;
float y;
double z;
}
共用体使用覆盖技术,成员变量相互覆盖。同一时间只能存放一个类型成员。
共用体变量的初始化不能在定义时进行,共用体也不能作为函数的参数。