结构体
一、复合类型与结构体
复合类型的含义:在编程语言中,最基本的、不可再分的数据类型称为基本类型,例如整型、浮点型。根据语法规由基本类型组合而成的类型称为复合类型。
结构体的含义:“结构”是一种构造类型,它是由若干“成员”组成的。它每一个成员可以是一个基本数据类型或者又是一个构造类型。
结构体的基本语法为:
struct 结构名
{成员列表};
例如:定义和访问结构体。
main()
{
struct complex_struct{ double x,y;}z;
double x=3.0;
z.x=x;
z.y=4.0;
printf("struct value:z.x=%d z.y=%d\n",z.x,z.y);
}
结果显示:struct value:z.x=3.000000 z.y=4.000000
结构类型变量的说明三种方法:
1.先定义结构在说明变量。
struct stu
{
int id;
char *name;
char *sex;
};
int _tmain(int argc, _TCHAR* argv[])
{
struct stu boy;
boy.id=1001;
boy.sex="男";
printf("%s",boy.sex);
getchar();
}
2.在定义结构类型的同时说明结构变量
struct 结构名
{成员列表}变量名列表;
3.直接说明结构变量。
struct
{成员列表}变量名列表;
二、嵌套结构体
结构体也是一种递归定义:结构体的成员具有某种数据类型,而结构体本身也是一种数据类型。换句话说,结构体的成员可以使另一个结构体,即结构体可以嵌套定义。
例如:我们在复数的基础上定义复平面上的线段。
struct segment
{
struct complex_struct start;
struct complex_struct end;
};
初始化也可以嵌套,因此嵌套结构体可以潜掏地初始化,例如:
struct segment s={{1.0,.2.0},{4.0,6.0}};
也可以平坦地(Flat)初始化。例如:
struct segment 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;