C++ 数据结构解析:结构体内存分配与枚举

需积分: 0 1 下载量 93 浏览量 更新于2024-08-19 收藏 86KB PPT 举报
"这篇教程主要讲解了C++中的数据结构,包括 Typedef、枚举、结构体和数组的使用。通过这些基础知识,可以帮助读者更好地理解和操作C++中的复杂数据结构。" 文章详细内容: 1. **Typedef**: Typedef 是C++中一个非常有用的工具,它允许我们为现有的数据类型创建一个新的别名。例如,`typedef double* PDBL;` 将 `double` 指针类型命名为 `PDBL`,之后我们可以用 `PDBL` 代替 `double*`。这样做可以提高代码的可读性,尤其是在类型表达式较长或者需要一个更有意义的名字时。 2. **枚举(Enumerations)**: 枚举类型是一种定义常量集合的方式。例如,`enum open_modes {input=1, output, append};` 定义了三个常量 `input`、`output` 和 `append`,分别赋值为1、2、3。枚举变量可以像普通整型变量一样使用,但不能直接打印枚举变量的名字,通常需要通过字符数组或转换函数来显示其值。 3. **结构体(Structs)**: 结构体是用来组合不同类型的数据的一种数据结构。例如,`struct student { String name; int age; };` 定义了一个包含姓名和年龄的学生结构体。结构体变量如 `Stu1` 在声明后分配内存,可以像访问普通变量一样访问其成员,如 `Stu1.name = "张三"`。在面向对象编程中,结构体常被类(Class)所替代,因为类提供了更多的特性,如封装、继承和多态。 4. **结构体的内存分配**: 结构体的内存布局在声明结构体类型时确定,但实际的内存分配发生在声明结构体变量时。每个结构体成员按照它们在结构体中的顺序分配内存,成员间可能存在对齐填充以优化访问效率。 5. **结构体作为形参**: 当结构体作为函数参数传递时,可以使用引用或指针。使用引用避免了复制结构体的开销,而使用指针则需要考虑指针的管理和内存分配。 6. **数组**: 数组是一种顺序存储的数据结构,可以用来存储同一类型的多个元素。数组下标从0开始,可以使用循环遍历所有元素。数组名实际上是指向数组首元素的指针,如 `int i[3]` 的 `i` 就指向 `i[0]` 的地址。数组初始化可以通过直接赋值,如 `int ia[3] = {0, 1, 2}`,或者使用循环进行逐个元素的初始化。 7. **课后实践**: 鼓励学生自学联合体(Union)的使用,并理解例2-15中的情况。联合体允许在相同内存空间内存储不同类型的变量,而例2-15可能是关于联合体的一个例子。 8. **错误示例**: 提到了一个怪异的数组访问表达式 `i[1,2]=99`,这在C++中是不合法的,因为它试图对两个元素进行赋值操作。正确的方式应该是单独访问每个元素,如 `i[1] = 99; i[2] = 99;`。 总结来说,这篇教程涵盖了C++中基本的数据结构,通过这些基础,读者可以进一步学习更复杂的编程概念,如类、模板和容器等。理解这些内容对于编写高效、清晰的C++代码至关重要。