结构
一、定义结构
使用 struct 语句来定义结构,结构是一个包含多个成员的数据类型。
struct 语句的格式如下:
struct tag {
member-list
member-list
member-list
...
} variable-list ;
在一般情况下,tag、member-list、variable-list 这 3 部分至少要出现 2 个。
符号 | 含义 |
---|---|
tag | 结构体标签 |
member-list | 标准的变量定义,比如 int i; 或者 float f 等 |
variable-list | 结构变量,定义在结构的末尾,最后一个分号之前,可以指定一个或多个结构变量 |
二、声明结构的形式
第一种
// 此声明声明了拥有3个成员的结构体,分别为整型的 x,字符型的 y 和双精度的 z
// 结构体的标签被命名为 point,没有声明变量
struct point {
int x;
float y;
double z;
};
// 用 point 标签的结构体,另外声明了变量 p1、p2、p3
struct point p1, p2[10], *p3;
// p1、p2、p3 都是 point, 里面有 x y z 的值
第二种
// 此声明声明了拥有3个成员的结构体,分别为整型的 x,字符型的 y 和双精度的 z
// 同时又声明了结构体变量 p1、p2、p3
// 这个结构体并没有标明其标签
struct {
int x;
float y;
double z;
}p1, p2[10], *p3;
// p1、p2、p3 都是一种无名结构, 里面有 x y z
第三种
// 此声明声明了拥有3个成员的结构体,分别为整型的 x,字符型的 y 和双精度的 z
// 同时又声明了结构体变量 p1、p2、p3
// 结构体的标签被命名为 point
struct point {
int x;
float y;
double z;
}p1, p2, p3;
// p1、p2、p3 都是 point, 里面有 x y z 的值
第一种和第三种形式,都声明了结构 point,但第二种形式没有声明 point,只是定义了三个变量。
第四种
// 结构体的成员包含其他结构体,或包含指向自己结构体类型的指针
// 此结构体的声明包含了其他的结构体
struct COMPLEX
{
char string[100];
struct SIMPLE a;
};
// 此结构体的声明包含了指向自己类型的指针
struct NODE
{
char string[100];
struct NODE *next_node;
};
第五种
// 两个结构体互相包含
struct B; // 对结构体B进行不完整声明
// 结构体A中包含指向结构体B的指针
struct A
{
struct B *partner;
//other members;
};
// 结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
struct B
{
struct A *partner;
//other members;
};