C++程序设计中的结构体是一种用户自定义的数据类型,允许将多个不同数据类型的变量组合在一起,形成一个新的复合类型。结构体的概念在于,它允许开发者创建具有多个成员的类型,每个成员可以是基本数据类型如整型(int)、浮点型(float)、字符型(char),或者是其他复杂类型如数组、指针或甚至其他结构体。结构体的定义使用`struct`关键字,后跟结构体名和成员列表,成员列表由各成员的数据类型和名称组成,用分号隔开。
在定义结构体类型后,可以声明结构体变量。常见的定义方式有两种:
1. 先定义结构体类型,然后声明变量。例如:
```cpp
struct Student {
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
struct Student student1, student2;
```
在这个例子中,`Student`是结构体类型,`student1`和`student2`是结构体变量。系统会为每个结构体变量分配足够的内存来存储所有成员。
2. 在声明类型的同时定义变量。例如:
```cpp
struct Student {
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
} student1, student2;
```
这种方式在一行内完成了类型定义和变量声明。
结构体变量的初始化通常在声明时完成,或者在随后的语句中使用花括号 `{}` 包含值。例如:
```cpp
struct Student {
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
} student1 = {1001, "张三", 'M', 25, 90.5, "北京市"};
```
结构体变量的引用是通过点操作符 `.` 来访问其成员,例如 `student1.num` 可以获取 `student1` 的编号。
结构体数组是结构体变量的集合,可以同时存储多个结构体实例。例如:
```cpp
struct Student students[10];
```
这里,`students` 是一个包含10个`Student`结构体的数组。
指向结构体变量的指针可以用来间接访问结构体的成员。指针声明使用 `*` 符号,例如:
```cpp
struct Student *ptr;
ptr = &student1;
printf("编号: %d\n", ptr->num);
```
这里的 `ptr->num` 相当于 `(*ptr).num`,通过指针访问 `student1` 的 `num` 成员。
结构体类型数据作为函数参数可以传递整个结构体给函数,这需要在函数声明和定义中指定结构体类型。例如:
```cpp
void printStudent(struct Student s) {
printf("编号: %d, 姓名: %s, 性别: %c, 年龄: %d, 分数: %.2f, 地址: %s",
s.num, s.name, s.sex, s.age, s.score, s.addr);
}
printStudent(student1);
```
在这个例子中,`printStudent` 函数接收一个 `Student` 结构体作为参数,并打印出其所有成员。
C++中的结构体提供了一种强大的工具,用于组织和管理复杂的数据结构,使得代码更加模块化和可读。通过结构体,可以方便地处理具有多种属性的对象,如上面的`Worker`和`Student`示例。在实际编程中,结构体被广泛应用于各种场景,包括数据库记录、图形对象、配置文件解析等。