定义结构
为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:
struct [structure tag]{ member definition; member definition; ... member definition;} [one or more structure variables];
例:
struct Stu
{
int num;
char *name;
char *sex;
float score;
};
struct Stu boy1,boy2;
数据类型标志
complex_struct结构体有一个数据类型标志和两个浮点数组成,如果数据类型标志为0,那么两个浮点数就表示直角坐标,如果数据类型标志为1,那么两个浮点数就表示极坐标。这样,直角坐标和极坐标的数据都可以适配到complex_struct结构体中,无需转换和损失精度:
enum coordinate_type{RECYANGULAR,POLAR};
struct complex_struct{
enum coordinate_type t;
double a,b;
};
enum关键字的作用和struct关键字类似,把coordinate_type这个标识符定义为一个标签,strucct complex_struct 表示一个结构类型体,而俄怒骂coord_type 表示一个枚举类型。RECTANGULAR就表示常量0,POLAR表示常量1.
嵌套结构体
结构体也是一种递归定义:结构体的成员具有某种数据类型,而结构体本身也是一种数据类型。结构体的成员可以是另外一个结构体,即结构体可以嵌套定义。
初始化也可以嵌套 ,例如:
struct segment s={{1.0,2.0},{4.0,6.0}};
也可以Flat(平坦)的初始化,例如:
struct segament s={1.0,2.0,4.0,6.0};
甚至可以把两种方式混合使用(这样可读性很差,应该避免):
struct segment s={{1.0,2.0},4.0,6.0};
利用C99的新特性也可以做Menberwise Initialization,例如:
struct segment s={.start.x=1.0,.end.x=2.0,};
访问嵌套结构体的成员要用到多个“.”运算符,例如:
s.start.t=RECTANGULAR;
s.start.a=1.0;
s.start.b=2.0;