第1章 结构体
结构体(struct)是一种用户自定义的数据类型,它允许将不同类型的数据项组合在一起,形成一个新的数据单元。
1.结构体的定义
结构体的定义使用 struct 关键字,其基本语法如下:
struct 结构体名
{
数据类型 成员1;
数据类型 成员2;
// 可以有更多的成员,也可以是其他结构体
};
结构体名:是结构体类型的标识符,用于后续声明该结构体类型的变量。
成员:是结构体内部包含的数据项,每个成员可以有不同的数据类型。
以下是一个简单的结构体定义示例,用于表示一个学生的信息:
struct Student
{
int id;
char name[10];
int age;
};
在这个示例中,Student 是结构体名,它包含三个成员:id(整数类型,用于存储学生的编号)、name(字符串类型,用于存储学生的姓名)和 age(整数类型,用于存储学生的年龄)。
2.结构体变量的声明和初始化
在定义结构体之后,可以声明该结构体类型的变量(或数组)。声明语法如下:
结构体名 变量名;
例如:
Student s1;
结构体变量可以通过多种方式进行初始化:
(1)逐个成员初始化
例如:
s1.id = 1;
strcpy(s1.name, “Alice”);
s1.age = 20;
(2)初始化列表初始化
Student s2 = {2, “Bob”, 21}; // 仅限于定义时初始化
也可以写成:
Student s2{2, “Bob”, 21};
第2章 联合体
联合体(Union),也被称为共用体,是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。
1.联合体的定义
联合体的定义使用 union 关键字,其基本语法如下:
union 联合体名
{
数据类型 成员1;
数据类型 成员2;
// 可以有更多的成员
};
联合体名:是联合体类型的标识符,用于后续声明该联合体类型的变量。
成员:是联合体内部包含的数据项,每个成员可以有不同的数据类型。
以下是一个简单的联合体定义示例:
union Data
{
int i;
float f;
char str[20];
};
在这个示例中,Data 是联合体名,它包含三个成员:i(整数类型)、f(单精度浮点数类型)和 str(字符数组类型)。
2.联合体变量的声明和初始化
(1)声明联合体变量
在定义联合体之后,可以声明该联合体类型的变量。声明语法如下:
联合体名 变量名;
声明一个 Data 类型的变量:
Data d;
(2)初始化联合体变量
联合体变量只能同时存储一个成员的值,初始化时通常只初始化其中一个成员。示例如下:
Data d;
d.i = 10; // 初始化整数成员
(3)联合体的内存布局
联合体的所有成员共享同一块内存空间,其大小取决于联合体中最大成员的大小。例如,上述 Data 联合体中,str 数组的大小最大(20 字节),所以 Data 联合体的大小为 20 字节。
(4)访问联合体成员
可以使用成员访问运算符 . 来访问联合体变量的成员。但需要注意的是,同一时间只能使用一个成员,因为所有成员共享同一块内存。每次给不同的成员赋值时,会覆盖之前存储在该内存位置的数据。示例如下:
union Data
{
int i;
float f;
char str[20];
};
int main()
{
Data d;
// 使用整数成员
d.i = 10;
cout << “d.i: ” << d.i << endl;
// 使用浮点数成员
d.f = 220.5;
cout << “d.f: ” << d.f << endl;
// 使用字符数组成员
strcpy(d.str, “Hello”);
cout << “d.str: ” << d.str << endl;
return 0;
}
程序运行结果为:
d.i: 10
d.f: 220.5
d.str: Hello