C++ 结构与示例
什么是 C++ 中的结构体?
A 结构 是一种 C++ 数据结构,可用于将不同数据类型的元素存储在一起。在 C++ 中,结构是用户定义的数据类型。该结构创建了一种数据类型,用于将不同数据类型的项分组到一个数据类型下。
例如:
假设您需要存储有关某人、他们的姓名、公民身份和年龄的信息。您可以创建姓名、公民身份和年龄等变量来分别存储数据。
但是,您将来可能需要存储有关许多人的信息。这意味着将创建不同个体的变量。比如name1、citizenship1、age1等。为了避免这种情况,最好创建一个struct。
在本 C++ 教程中,您将学习:
- 什么是 C++ 中的结构体?
- 何时使用结构?
- C++结构初始化
- 创建结构实例
- 访问结构成员
- 指向结构的指针
- 作为函数参数的结构体
- C++ 结构的限制
何时使用结构?
以下是在 C++ 中使用结构的一些原因。
- 当您需要将不同数据类型的元素存储在一种数据类型下时,请使用结构体。
- C++ 结构是值类型,而不是引用类型。如果您不打算在创建后修改数据,请使用结构。
C++ 结构体初始化
要创建 C++ 结构,我们使用 struct 关键字,后跟标识符。标识符成为结构的名称。以下是创建 C++ 结构的语法:
语法:
struct struct_name { // struct members }
在上面的语法中,我们使用了 struct 关键字。 struct_name 是结构的名称。
结构成员添加在花括号内。这些成员可能属于不同的数据类型。
例如:
struct Person { char name[30]; int citizenship; int age; }
在上面的示例中,Person 是一个具有三个成员的结构。成员包括姓名、国籍和年龄。一个成员是 char 数据类型,而其余 2 个是整数,当创建结构时,不分配内存。仅在将变量添加到结构后才分配内存。
创建结构实例
在上面的例子中,我们创建了一个名为 Person 的结构体。我们可以如下创建一个struct变量:
Person p;
p 是 Person 类型的结构变量。我们可以使用这个变量来访问结构体的成员。
访问结构成员
要访问结构成员,我们使用结构的实例和点 (.) 运算符。例如访问struct Person的成员年龄:
p.age = 27;
我们已经使用结构体的实例 p 访问了结构体 Person 的成员年龄。然后我们将成员年龄的值设置为 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。
- 将结构成员公民身份的值设置为 1。
- 将结构成员年龄的值设置为 27。
- 在控制台上打印结构成员公民身份的值以及其他一些文本。
- 在控制台上打印结构成员年龄的值以及其他一些文本。
- 如果程序运行成功,应该返回一个值。
- 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 的结构体。
- 结构体长度的开始。
- 创建一个名为meters的整数数据类型的结构成员。
- 创建一个名为 cm 的整数类型的结构成员。
- 结构体长度结束。
- 调用 main() 函数。
- main() 函数体的开始。
- 创建一个指针变量 *ptr 和一个长度类型的普通变量 l。
- 将变量 l 的地址存储在我们的指针变量中。
- 在控制台上显示一条消息,要求用户输入变量仪表的值。
- 读取用户通过键盘输入的值。成员函数meters在这里使用指针变量访问。
- 在控制台上显示一条消息,要求用户输入可变厘米的值。
- 读取用户通过键盘输入的值。这里使用指针变量访问成员函数 cm。
- 在控制台上显示从用户读取的值以及其他一些文本。
- 程序必须在成功执行后返回一个值。
- 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 结构体的开始。
- 创建 struct Person 的成员。该成员被命名为公民,并且是整数类型。
- 创建 struct Person 的成员。该成员名为 age 并且是整数类型。
- 结构体主体的结尾。
- 创建一个函数,将 struct Person 的实例 p 作为参数。
- 调用主函数。 { 标志着 main() 函数体的开始。
- 创建一个 struct Person 实例并将其命名为 p。
- 使用结构体的实例 p 访问结构体成员变量公民身份,并将其赋值为 1。
- 使用结构体的实例 p 访问结构体成员变量 age,并将其赋值为 27。
- 调用函数并将结构 Person 的实例 p 作为参数传递给它。
- 函数必须在成功执行后返回一个值。
- main() 函数主体的结尾。
- 创建函数体。
- 函数体的开始。
- 访问结构成员公民值并将其与其他文本一起打印在控制台上。
- 访问结构成员年龄值并将其与其他文本一起打印在控制台上。
- 函数体结束。
C++ 结构的限制
以下是结构的局限性:
- 不能将 struct 数据类型视为内置数据类型。
- + - 等运算符不能用于结构变量。
- 结构不支持数据隐藏。任何函数都可以访问结构的成员,无论其范围如何。
- 不能在结构体内部声明静态成员。
- 不能在结构中创建构造函数。
总结:
- 结构体是一种数据结构,用于存储属于不同类型的数据元素。
- 数组存储相似类型的数据元素,而结构体存储不同类型的数据元素。
- 当数据元素不希望改变值时,应该使用结构体。
- 使用点 (.) 运算符访问结构的成员。
- 我们必须创建一个结构实例。
- 要创建 C++ 结构,我们使用 struct 关键字。
- 指向结构的指针的创建方式与创建指向常规类型的指针的方式类似。
- 可以像传递普通函数一样将结构作为参数传递给函数。
C语言