C++ 结构体

2025年4月24日 | 阅读 8 分钟

在 C++ 中,结构体(structs)是用户定义的类型,用于创建结构化对象。它们允许我们将不同数据类型的变量收集到一个名称下。结构体通常用于轻量级对象,例如矩形、颜色、点等。在 C++ 中,结构体可以包含数据成员和 成员函数

语法

它具有以下语法:

在上面的声明中,通过在 struct 关键字后跟标识符(结构体名称)来声明一个结构体。在大括号 {} 中,我们可以声明不同类型的成员变量。

C++ Structs

在上面的示例中,tpointech 是一个结构体,包含三个变量:full_name、emp_id 和 salary。当结构体被声明时,不会分配内存。当创建结构体变量时,才会分配内存。

创建结构体变量

一旦声明了结构体,就必须定义一个结构体变量来分配内存并存储数据。结构体变量的 数据类型 是结构体名称,后面跟着变量名。

语法

它具有以下语法:

这里,struct 是结构体的名称,Employee 是变量的名称。

初始化结构体成员

在 C++ 中,无法在声明时在结构体定义中初始化结构体成员。下面的示例会导致 C++ 编译器错误:

在声明结构体变量时,可以使用花括号 {} 来初始化结构体成员。值的顺序按照结构体声明的成员顺序进行赋值。

在此示例中,程序将两个整数成员 q 和 j(代表坐标值)定义为 Coordinate 结构体的成员。main() 函数使用 {15, 25} 初始化结构体变量 point1,将 15 赋给 q,将 25 赋给 j。

访问结构体成员

可以使用点 (.) 运算符直接访问结构体变量的任何成员。点运算符分隔结构体变量名和成员名。可以使用此方法检索或修改存储在结构体中的值。

C++ 结构体示例

我们来看一个 C++ 程序,说明如何在 C++ 中访问结构体成员。

示例

编译并运行

输出

The First Name is: Alice
The Last Name is: Johnson
Age is: 20
The Grade is: 90.5

说明

在此示例中,程序定义的 Student 结构体的四个成员 first_name、last_name、age 和 grade 存储了学生的信息。在 main() 函数内,数据被声明在一个名为 student1 的结构体变量中。

之后,程序为 student1 的每个成员生成值,将名字设置为 "Alice",姓氏设置为 "Johnson",年龄设置为 20,分数设置为 90.5。

C++ 结构体中的成员函数

在 C++ 中,结构体也可以拥有函数,这些函数可以直接对结构体的数据元素进行操作。这些成员函数与普通函数类似,但这些函数定义在结构体的作用域内。

通过将数据和行为组合到一个单元中,结构体变得更加灵活,这与类非常相似。C++ 结构体支持许多类组件,包括 访问修饰符构造函数析构函数 等等。

语法

它具有以下语法:

C++ 结构体中的成员函数示例

让我们看一个示例来说明 C++ 中使用结构体的成员函数。

示例

编译并运行

输出

The multiplication of 15 and 8 is: 120

说明

在此示例中,我们创建了一个名为 Multiplication 的结构体,它有两个数据成员 n1 和 n2。该结构体包含一个名为 multiply() 的成员函数,该函数返回 n1 和 n2 的乘积。然后,通过结构体变量 mul 调用成员函数。

C++ 中的结构体数组

多个结构体变量可以顺序地存储在结构体数组中。使用点 (.) 运算符和数组索引来访问单个成员,数组中的每个元素代表结构体的一个实例。

C++ 结构体数组示例

让我们看一个示例来说明 C++ 中的结构体数组。

示例

编译并运行

输出

5 10
15 20

说明

在此示例中,我们定义了一个名为 Point 的结构体,它表示坐标,并有两个整数成员 x 和 y。在 main() 函数中,在结构体数组 coordinates 中声明了两个元素,每个元素都用花括号 {} 初始化。

使用 cout 函数,在通过点 (.) 运算符访问之后,打印两个元素的 x 和 y 值。

C++ 中的结构体指针

指向存储结构体变量内存地址的指针称为结构体指针。当使用结构体指针时,使用箭头 (->) 运算符来访问结构体成员,而不是点 (.) 运算符。

C++ 结构体指针示例

下面的程序说明了 C++ 中的结构体指针

示例

编译并运行

输出

The length of a rectangle is: 10
The width of a rectangle is: 5

说明

程序通过定义一个具有两个整数成员 length 和 width 的 Rectangle 结构体来演示 C++ 中的结构体指针。声明并初始化了一个结构体变量 r1,其值为 {10, 5},并将指针 ptr 指向 r1 的地址。通过指针使用箭头 (->) 运算符访问并显示结构体成员。

C++ 中带 typedef 的结构体

在 C++ 中,typedef 关键字允许我们为现有变量创建别名。它为结构体的实际名称创建了一个别名。当与结构体一起使用时,通过消除每次声明结构体变量时使用 struct 关键字的需要,可以使代码更具可读性和简洁性。

语法

它具有以下语法:

C++ 中带 typedef 的结构体示例

让我们看一个示例来说明 C++ 中带 typedef 的结构体。

示例

编译并运行

输出

Student ID: 101
Student Name: Alice
Marks: 78

说明

在此示例中,我们使用 typedef 定义了一个结构体,这样我们就可以直接使用 Student 而无需添加 struct 前缀。它创建了一个类型为 Student 的结构体变量 s1。然后,我们为 s1 的成员赋值。最后,cout 函数显示结果。

C++ 中结构体与类的区别

C++ 中结构体与类之间的一些区别如下:

结构Class
如果未明确声明访问说明符,默认访问说明符为 public。如果未明确声明访问说明符,默认访问说明符为 private。
结构体语法

struct structure_name
{
// 结构体体
}
类语法

class class_name
{
// 类体
}
结构体的实例称为“结构体变量”。类的实例称为“类的对象”。

C++ 结构体选择题

1. C++ 中 struct 的用途是什么?

  1. 仅存储整数值
  2. 将不同类型相关的变量分组到一个单元中
  3. 执行数学运算
  4. 替换数组
 

答案:b) 将不同类型相关的变量分组到一个单元中


2. 在 C++ 中如何访问结构体成员?

  1. 使用 -> 运算符
  2. 使用 :: 运算符
  3. 使用 # 运算符
  4. 使用 . 运算符
 

答案:d) 使用 . 运算符


3. 定义 C++ 结构体时会发生什么?

  1. 为其成员分配内存。
  2. 它立即存储数据。
  3. 它充当蓝图,仅在创建变量时分配内存。
  4. 它会自动创建一个对象。
 

答案:c) 它充当蓝图,仅在创建变量时分配内存。


4. C++ 结构体可以有成员函数吗?

  1. 是的,结构体可以同时拥有数据成员和成员函数
  2. 不,只有类可以有成员函数
  3. 是的,但只能是静态函数
  4. 不,函数必须在外部声明
 

答案:a) 是的,结构体可以同时拥有数据成员和成员函数


5. 如何在 C++ 中声明结构体数组?

  1. struct Student arr[];
  2. Student arr[5];
  3. struct Student = arr[5];
  4. Student[] arr;
 

答案:b) Student arr[5];


下一主题C++ 枚举