1.结构体概念
- 把相互联系的数据合并到一起;
- 结构体:在同一个组合项中包含若干个不同类型的数据类型;
- 类似数据库中的记录;
- 结构的每一个成员又称为域;
- 定义结构体类型变量的方法
- 先定义结构体类型再定义变量名
```cpp
struct student
{ int num;
char name[20]; char sex; int age;
float score;
char addr[30]; }; struct student student1, student2;
- 先定义结构体类型再定义变量名
```cpp
struct student
- 结构体类型只是一种数据类型,不占内存空间,只有定义结构体类型变量时才开辟内存空间。
**2.结构体变量的定义方法和初始化**
- 定义结构体变量的三种方法:
- 先声明结构体类型再定义变量:
```cpp
student std1,std2;
在声明同时定义
struct Student { int num; char name[20]; char sex; int age; } std1, std2;
直接定义结构体类型变量
struct { int num; char name[20]; char sex; int age; } std1, std2;
- 结构体定义的说明
- 结构体类型的变量在内存中依照其成员的顺序排列,所占内存空间的大小是全体成员所占空间的总和;
- 在编译时,仅对变量分配空间,不对类型分配空间;
- 对结构体中各个成员可以单独引用、赋值,其作用与变量等同;
格式:变量名.成员名
结构体的成员可以是另一个结构体类型
struct date { int month; int day; int year; }; struct student { int num; char name[20]; struct date birthday; };
成员名可以与程序中的变量名相同,二者分占不同的内存单元,互不干扰。
- 结构体变量定义和初始化
struct Student { int num; char name[20]; char sex; int age; } std1 = {10, “wang”, ‘F’, 19}; student std1 = {10, “wang”, ‘F’, 19};
3.结构体变量的引用
可直接赋值
std1 = std2;
可以直接访问结构体变量的一个成员
std1.num = 10010;
嵌套结构可以利用多个成员运算符
std1.birthday.month = 10;
不能对结构整体进行输入输出运算
cout<<std1; // 报错!
对结构体变量的成员变量可看成普通的变量
std1.age++;
可引用结构体成员变量的地址,也可以引用结构体变量的地址
cout<<&std1; cout<<&std1.age;
结构体变量使用说明
- 同类型结构体变量之间可直接赋值。这种赋值相当于各个成员的依次赋值。
- 结构体变量不能直接进行输入输出,它的每个成员能否直接输入输出,取决于成员的类型。
- 结构体变量可作为函数的参数,函数可以返回结构体的值。当函数的形参与实参为结构体类型的变量时,这种结合方式属于值调用方式,即属于值传递。
4.结构体数组
- 每个数组元素都是一个结构体类型的数据
定义
student std[20];
初始化
student std[] = {{…},{…},…};
5.指向结构体变量的指针
通过指针引用结构体变量的成员
student std; student* p; p = &std; ASSERT(p->num==std.num);
6.指向结构体变量的指针**用结构体变量和指向结构体变量的指针构成链表
- 链表应用场合:存储一个集合的元素,但地址不联系。
7.结构体类型作为函数参数
将结构体变量中的数据传递给另一个函数的三种方法:
用结构体变量名作参数
void fun(student);
用指向结构体变量的指针作参数
void fun(student*);
用结构体变量的引用变量作参数
void fun(student&);