C 结构体
1. 基本概念
- 在 C 语言中可以使用结构体(structure)来组织多个相同或者不同类型的数据。
- 结构体可以被声明为变量、指针或者数组,用以实现较复杂的数据结构。
- 结构体是一些元素的集合,这些元素被称为结构体成员。
- 结构体成员可以是任何一种的基本数据类型,也可以是另一个结构体。
2. 结构体声明与定义
struct tag {
member-list
member-list
member-list
...
} variable-list ;
- tag 是结构体标签。
- member-list 是标准的变量定义,可以说有效的数据类型定义。
- variable-list 结构变量,定义在结构体的末尾,最后一个分号之前,可以指定一个或多个变量结构。
- 在一般情况下,tag、member-list、variable-list 这 3 部分至少要出现 2 个。
// 此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
// 同时又声明了结构体变量 stu1
// 这个结构体并没有标明其标签
struct
{
int a;
char b;
double c;
} stu1;
//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//结构体的标签被命名为SIMPLE,没有声明变量
struct SIMPLE
{
int a;
char b;
double c;
};
//用SIMPLE标签的结构体,另外声明了结构体变量 temp1、temp2、temp3
struct SIMPLE temp1, temp2[20], *temp3;
//也可以用typedef创建新类型
typedef struct
{
int a;
char b;
double c;
} Simple2;
//现在可以用Simple2作为类型声明新的结构体变量
Simple2 u1, u2[20], *u3;
//此结构体的声明包含了其他的结构体
struct COMPLEX
{
char string[100];
struct SIMPLE a;
};
//此结构体的声明包含了指向自己类型的指针
struct NODE
{
char string[100];
struct NODE *next_node;
};
- 在第一个声明和第二个声明中即使它们的成员列表是一样的,它们也是不同的结构体类型。
- 结构体声明只是进行一个框架的描绘,它并不会在内存空间中分配空间存储数据,直到我们去定义一个结构体类型的变量。
3 访问结构体成员
要访问结构体成员,我们需要使用成员访问运算符( . )。成员
stu1.a; // 访问 stu1 结构体的 a 成员
stu1.b; // 访问 stu1 结构体的 b 成员