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;
}

输出

Accessing Struct Members

这是代码的屏幕截图:

Accessing Struct Members

代码解释

  1. 在程序中包含 iostream 头文件,以便使用其中定义的函数。
  2. 包含 std 命名空间,以便在不调用它的情况下使用它的类。
  3. 创建一个名为 Person 的结构。
  4. 结构体的开始。
  5. 创建一个名为 citizenship 的结构成员,类型为整数。
  6. 创建一个名为 age 的结构成员,类型为整数。
  7. 结构体的结束。
  8. 调用 main() 函数。程序逻辑应添加到此函数的主体中。
  9. 创建一个 Person 结构的实例并将其命名为 p。
  10. 将结构成员 citizenship 的值设置为 1。
  11. 将结构成员 age 的值设置为 27。
  12. 在控制台上打印结构成员 citizenship 的值以及其他一些文本。
  13. 在控制台上打印结构成员 age 的值以及其他一些文本。
  14. 如果程序成功运行,它应该返回值。
  15. 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;
}

输出

Pointers to Structure

这是代码的屏幕截图:

Pointers to Structure

代码解释

  1. 在程序中包含 iostream 头文件,以便使用其函数。
  2. 在程序中包含 std 命名空间,以便在使用其类时无需调用它。
  3. 创建一个名为 Length 的结构。
  4. Length 结构体的开始。
  5. 创建一个名为 meters 的结构成员,数据类型为整数。
  6. 创建一个名为 centimeters 的结构成员,类型为整数。
  7. Length 结构体的结束。
  8. 调用 main() 函数。
  9. main() 函数体的开始。
  10. 创建一个指针变量 *ptr 和普通变量 l,类型为 Length。
  11. 将变量 l 的地址存储到我们的指针变量中。
  12. 在控制台上显示一条消息,要求用户输入变量 meters 的值。
  13. 通过键盘读取用户输入的值。此处使用指针变量访问成员函数 meters。
  14. 在控制台上显示一条消息,要求用户输入变量 centimeters 的值。
  15. 通过键盘读取用户输入的值。此处使用指针变量访问成员函数 centimeters。
  16. 在控制台上显示从用户读取的值以及其他一些文本。
  17. 程序必须在成功执行后返回值。
  18. 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;
}

输出

Struct as Function Argument

这是代码的屏幕截图:

Struct as Function Argument

代码解释

  1. 将 iostream 头文件包含到我们的文件中。然后我们将使用其函数而不会出错。
  2. 在我们的程序中包含 std 命名空间以使用其类。我们无需调用命名空间即可使用其类。
  3. 创建一个名为 Person 的结构。
  4. Person 结构体的开始。
  5. 创建 Person 结构的一个成员。该成员名为 citizenship,类型为整数。
  6. 创建 Person 结构的一个成员。该成员名为 age,类型为整数。
  7. Person 结构体的结束。
  8. 创建一个函数,该函数将 Person 结构 p 的实例作为参数。
  9. 调用 main 函数。{ 标记 main() 函数体的开始。
  10. 创建一个 Person 结构的实例并将其命名为 p。
  11. 使用结构实例 p 访问结构成员变量 citizenship,并将其值赋为 1。
  12. 使用结构实例 p 访问结构成员变量 age,并将其值赋为 27。
  13. 调用函数并将 Person 结构 p 的实例作为参数传递给它。
  14. 函数必须在成功执行后返回值。
  15. main() 函数体结束。
  16. 创建函数体。
  17. 函数体的开始。
  18. 访问结构成员 citizenship 的值,并在控制台上打印它以及其他文本。
  19. 访问结构成员 age 的值,并在控制台上打印它以及其他文本。
  20. 函数体的结束。

C++ 结构的局限性

以下是结构的局限性

  • 结构数据类型不能像内置数据类型那样对待。
  • 像 + - 等运算符不能用于结构变量
  • 结构不支持数据隐藏。结构成员可以被任何函数访问,无论其范围如何。
  • 不能在结构体内部声明静态成员。
  • 不能在结构体内部创建构造函数。

摘要

  • 结构是一种数据结构,用于存储不同类型的数据元素。
  • 而数组存储相似类型的数据元素,结构存储不同类型的数据元素。
  • 当预计数据元素的值不会改变时,应使用结构。
  • 结构成员使用点 (.) 运算符访问。
  • 我们必须创建结构的实例。
  • 要创建 C++ 结构,我们使用 struct 关键字。
  • 指向结构的指针的创建方式与指向常规类型的指针的创建方式相似。
  • 结构可以像普通函数一样作为参数传递给函数。