我们经常遇到需要存储一组数据的情况,无论这些数据是相似数据类型还是非相似数据类型。我们已经看到了C++中的数组,这些数组用于将相似数据类型的数据集存储在连续的内存位置。
与数组不同, C++中的结构是用户定义的数据类型,用于存储非相似数据类型的项目组。
什么是结构?
结构是C / C++中用户定义的数据类型。结构创建一个数据类型,该数据类型可用于将可能不同类型的项目分组为单个类型。
如何建立结构?
‘struct’关键字用于创建结构。创建结构的一般语法如下所示:
struct structureName{
member1;
member2;
member3;
.
.
.
memberN;
};
C++中的结构可以包含两种类型的成员:
- 数据成员:这些成员是普通的C++变量。我们可以在C++中创建具有不同数据类型变量的结构。
- 成员函数:这些成员是正常的C++函数。除了变量,我们还可以在结构声明中包含函数。
范例:
// Data Members
int roll;
int age;
int marks;
// Member Functions
void printDetails()
{
cout<<"Roll = "<
在以上结构中,数据成员是三个整数变量,用于存储任何学生的卷号,年龄和分数,并且成员函数是printDetails() ,它可以打印任何学生的所有上述详细信息。
如何声明结构变量?
结构变量既可以用结构声明来声明,也可以像基本类型一样声明为单独的声明。
// A variable declaration with structure declaration.
struct Point
{
int x, y;
} p1; // The variable p1 is declared with 'Point'
// A variable declaration like basic data types
struct Point
{
int x, y;
};
int main()
{
struct Point p1; // The variable p1 is declared like a normal variable
}
注意:在C++中,在声明变量之前,struct关键字是可选的。在C语言中,它是强制性的。
如何初始化结构成员?
结构成员不能使用声明进行初始化。例如,以下C程序编译失败。
但是在C++ 11及更高版本中被认为是正确的。
struct Point
{
int x = 0; // COMPILER ERROR: cannot initialize members here
int y = 0; // COMPILER ERROR: cannot initialize members here
};
出现上述错误的原因很简单,当声明数据类型时,不会为其分配任何内存。仅在创建变量时才分配内存。
可以使用花括号“ {}”来初始化结构成员。例如,以下是有效的初始化。
struct Point
{
int x, y;
};
int main()
{
// A valid initialization. member x gets value 0 and y
// gets value 1. The order of declaration is followed.
struct Point p1 = {0, 1};
}
如何访问结构元素?
使用dot(。)运算符可以访问结构成员。
#include
using namespace std;
struct Point {
int x, y;
};
int main()
{
struct Point p1 = { 0, 1 };
// Accessing members of point p1
p1.x = 20;
cout << "x = " << p1.x << ", y = " << p1.y;
return 0;
}
x = 20, y = 1
什么是结构数组?
像其他原始数据类型一样,我们可以创建结构数组。
#include
using namespace std;
struct Point {
int x, y;
};
int main()
{
// Create an array of structures
struct Point arr[10];
// Access array members
arr[0].x = 10;
arr[0].y = 20;
cout << arr[0].x << " " << arr[0].y;
return 0;
}
10 20
什么是结构指针?
像原始类型一样,我们可以拥有指向结构的指针。如果我们有一个指向结构的指针,则使用箭头(->)运算符而不是点(。)运算符符来访问成员。
#include
using namespace std;
struct Point {
int x, y;
};
int main()
{
struct Point p1 = { 1, 2 };
// p2 is a pointer to structure p1
struct Point* p2 = &p1;
// Accessing structure members using
// structure pointer
cout << p2->x << " " << p2->y;
return 0;
}
1 2
什么是结构成员对齐?
参见https://www.geeksforgeeks.org/structure-member-alignment-padding-and-data-packing/
在C++中,结构与类相同,但有一些区别。其中最重要的是安全性。结构不是安全的,并且在类是安全的并且不能隐藏其编程和设计细节的同时,不能向最终用户隐藏其实现细节。了解有关C++中的结构和类之间的区别的更多信息。