📜  C++中的结构

📅  最后修改于: 2021-05-30 08:04:02             🧑  作者: Mango

我们经常遇到需要存储一组数据的情况,无论这些数据是相似数据类型还是非相似数据类型。我们已经看到了C++中的数组,这些数组用于将相似数据类型的数据集存储在连续的内存位置。

与数组不同, 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 = "<如何声明结构变量?

结构变量既可以用结构声明来声明,也可以像基本类型一样声明为单独的声明。

// 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++中的结构和类之间的区别的更多信息

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”