C++ 结构体及示例
C++ 中的 struct 是什么?
STRUCT 是 C++ 中的一种数据结构,可用于将不同数据类型的元素组合在一起。在 C++ 中,结构是用户定义的数据类型。结构创建了一种数据类型,用于将不同数据类型的项组合在一个数据类型下。
例如
假设您需要存储某人的信息,例如姓名、国籍和年龄。您可以分别创建 name、citizenship 和 age 等变量来存储数据。
但是,将来您可能需要存储许多人的信息。这意味着将为不同个人创建变量。例如,name1、citizenship1、age1 等。为避免这种情况,最好创建一个 struct。
何时使用结构?
以下是 C++ 中使用结构的一些原因。
- 当您需要将不同数据类型的元素组合在一个数据类型下时,请使用结构。
- C++ 结构是值类型而不是引用类型。如果您不打算在创建后修改数据,请使用结构。
C++ 结构初始化
要创建 C++ 结构,我们使用 struct 关键字,后跟一个标识符。标识符成为结构的名称。以下是创建 C++ struct 的语法
语法
struct struct_name { // struct members }
在上面的语法中,我们使用了 struct 关键字。struct_name 是结构的名称。
结构成员在花括号内添加。这些成员可能属于不同的数据类型。
例如
struct Person { char name[30]; int citizenship; int age; }
在上面的示例中,Person 是一个具有三个成员的结构。成员包括 name、citizenship 和 age。一个成员是 char 数据类型,而其余 2 个是整数。创建结构时,不会分配内存。内存仅在将变量添加到 struct 后分配。
创建结构实例
在上面的示例中,我们创建了一个名为 Person 的结构。我们可以如下创建一个结构变量
Person p;
p 是 Person 类型的结构变量。我们可以使用此变量访问结构的成员。
访问结构成员
要访问结构成员,我们使用结构的实例和点 (.) 运算符。例如,要访问 Person 结构的 age 成员
p.age = 27;
我们使用结构的实例 p 访问了 Person 结构的 age 成员。然后我们将成员 age 的值设置为 27。
示例 1
#include <iostream> using namespace std; struct Person { int citizenship; int age; }; int main(void) { struct Person p; p.citizenship = 1; p.age = 27; cout << "Person citizenship: " << p.citizenship << endl; cout << "Person age: " << p.age << endl; return 0; }
输出
这是代码的屏幕截图:
代码解释
- 在程序中包含 iostream 头文件,以便使用其中定义的函数。
- 包含 std 命名空间,以便在不调用它的情况下使用它的类。
- 创建一个名为 Person 的结构。
- 结构体的开始。
- 创建一个名为 citizenship 的结构成员,类型为整数。
- 创建一个名为 age 的结构成员,类型为整数。
- 结构体的结束。
- 调用 main() 函数。程序逻辑应添加到此函数的主体中。
- 创建一个 Person 结构的实例并将其命名为 p。
- 将结构成员 citizenship 的值设置为 1。
- 将结构成员 age 的值设置为 27。
- 在控制台上打印结构成员 citizenship 的值以及其他一些文本。
- 在控制台上打印结构成员 age 的值以及其他一些文本。
- 如果程序成功运行,它应该返回值。
- main() 函数结束。
指向结构的指针
可以创建一个指向结构的指针。这与指向 int、float、double 等内置数据类型的指针的创建方式类似。请注意,C++ 中的指针将存储内存地址。
示例 2
#include <iostream> using namespace std; struct Length { int meters; float centimeters; }; int main() { Length *ptr, l; ptr = &l; cout << "Enter meters: "; cin >> (*ptr).meters; cout << "Enter centimeters: "; cin >> (*ptr).centimeters; cout << "Length = " << (*ptr).meters << " meters " << (*ptr).centimeters << " centimeters"; return 0; }
输出
这是代码的屏幕截图:
代码解释
- 在程序中包含 iostream 头文件,以便使用其函数。
- 在程序中包含 std 命名空间,以便在使用其类时无需调用它。
- 创建一个名为 Length 的结构。
- Length 结构体的开始。
- 创建一个名为 meters 的结构成员,数据类型为整数。
- 创建一个名为 centimeters 的结构成员,类型为整数。
- Length 结构体的结束。
- 调用 main() 函数。
- main() 函数体的开始。
- 创建一个指针变量 *ptr 和普通变量 l,类型为 Length。
- 将变量 l 的地址存储到我们的指针变量中。
- 在控制台上显示一条消息,要求用户输入变量 meters 的值。
- 通过键盘读取用户输入的值。此处使用指针变量访问成员函数 meters。
- 在控制台上显示一条消息,要求用户输入变量 centimeters 的值。
- 通过键盘读取用户输入的值。此处使用指针变量访问成员函数 centimeters。
- 在控制台上显示从用户读取的值以及其他一些文本。
- 程序必须在成功执行后返回值。
- main() 函数体结束。
结构作为函数参数
您可以将结构作为参数传递给函数。这与传递普通参数的方式相同。结构变量也可以传递给函数。一个很好的例子是当您需要显示结构成员的值时。这演示了这一点
示例 3
#include<iostream> using namespace std; struct Person { int citizenship; int age; }; void func(struct Person p); int main() { struct Person p; p.citizenship = 1; p.age = 27; func(p); return 0; } void func(struct Person p) { cout << " Person citizenship: " << p.citizenship<<endl; cout << " Person age: " << p.age; }
输出
这是代码的屏幕截图:
代码解释
- 将 iostream 头文件包含到我们的文件中。然后我们将使用其函数而不会出错。
- 在我们的程序中包含 std 命名空间以使用其类。我们无需调用命名空间即可使用其类。
- 创建一个名为 Person 的结构。
- Person 结构体的开始。
- 创建 Person 结构的一个成员。该成员名为 citizenship,类型为整数。
- 创建 Person 结构的一个成员。该成员名为 age,类型为整数。
- Person 结构体的结束。
- 创建一个函数,该函数将 Person 结构 p 的实例作为参数。
- 调用 main 函数。{ 标记 main() 函数体的开始。
- 创建一个 Person 结构的实例并将其命名为 p。
- 使用结构实例 p 访问结构成员变量 citizenship,并将其值赋为 1。
- 使用结构实例 p 访问结构成员变量 age,并将其值赋为 27。
- 调用函数并将 Person 结构 p 的实例作为参数传递给它。
- 函数必须在成功执行后返回值。
- main() 函数体结束。
- 创建函数体。
- 函数体的开始。
- 访问结构成员 citizenship 的值,并在控制台上打印它以及其他文本。
- 访问结构成员 age 的值,并在控制台上打印它以及其他文本。
- 函数体的结束。
C++ 结构的局限性
以下是结构的局限性
- 结构数据类型不能像内置数据类型那样对待。
- 像 + - 等运算符不能用于结构变量。
- 结构不支持数据隐藏。结构成员可以被任何函数访问,无论其范围如何。
- 不能在结构体内部声明静态成员。
- 不能在结构体内部创建构造函数。
摘要
- 结构是一种数据结构,用于存储不同类型的数据元素。
- 而数组存储相似类型的数据元素,结构存储不同类型的数据元素。
- 当预计数据元素的值不会改变时,应使用结构。
- 结构成员使用点 (.) 运算符访问。
- 我们必须创建结构的实例。
- 要创建 C++ 结构,我们使用 struct 关键字。
- 指向结构的指针的创建方式与指向常规类型的指针的创建方式相似。
- 结构可以像普通函数一样作为参数传递给函数。