C中的结构化数据类型


C中的结构化数据类型

在编程过程中,您可能会觉得需要定义自己的数据类型。在C中,这是使用两个关键字完成的: structtypedef 。 结构和联合将使您有机会将非同质数据类型存储到单个集合中。

什么是结构?

  • 结构 是C中的用户定义类型。它基于这样的想法,即程序员不仅要管理原始数据类型,还需要管理程序员定义的数据类型。
  • 结构 ,顾名思义,是由各种原语数据类型,如字符,整数,浮点变量,数组等等
  • 结构 还可以包含各种其他用户定义的数据类型。接下来你将学习嵌套结构。
  • 结构 构成了 面向对象编程 的基础,因为_类_的概念源于结构。

struct关键字

  • struct关键字可以帮助我们定义用户定义的数据类型。
struct StudentRecord
 {
  char Name[20];
  int Class;
  char Address[30];
  char Phone[10];
 };
  • 我们还可以使用typedef定义一个结构 ,这样可以更轻松地在程序中稍后初始化一个结构。
typedef struct StudentRecord
 {
  char Name[20];
  int Class;
  char Address[30];
  char Phone[10];
 }Record;

main() ,用户定义的数据类型StudentRecord定义为:

int main(void)
 {
  struct StudentRecord student1;
 }

使用typedef ,用户定义的数据类型如下所示:

int main(void)
 {
  Record student1;
 }

要访问存储在student1中的数据,我们使用点( )运算符来访问结构类型变量的内容。

int main(void)
 {
  struct StudentRecord student1;
  student1.Class = 10;
  printf("Enter Name of Student\n");
  scanf("%s",&student1.Name);
  printf("Enter Address of Student\n");
  scanf("%s",&student1.Address);
  printf("Enter Phone Number of Student\n");
  scanf("%s",&student1.Phone);
  // Printing the Data
  printf("Name: %s \n, Class: %d \n, Address: %s \n, Phone: %s \n",student1.Name, student1.Class, student1.Address, student1.Phone);
 }

声明一种新的数据类型

typedef struct student_structure{
    char* name;
    char* surname;
    int year_of_birth;
 }student;

在这个小代码之后, student将成为一个新的保留关键字,您将能够创建student类型的变量。 请注意,这种新类型的变量将被构造,这意味着定义一个物理分组的变量列表,这些变量列表将放在一个内存块中的一个名称下。

新数据类型用法

现在让我们创建一个新的student变量并初始化它的属性:

student stu;

   strcpy( stu.name, "John");
   strcpy( stu.surname, "Snow");
   stu.year_of_birth = 1990;

   printf( "Student name : %s\n", stu.name);
   printf( "Student surname : %s\n", stu.surname);
   printf( "Student year of birth : %d\n", stu.year_of_birth);

正如您在此示例中所看到的,您需要为新数据类型中包含的所有变量赋值。 要访问结构变量,您可以使用stu.name的点。 还有一种更短的方法可以为结构赋值:

typedef struct{
   int    x;
   int    y;
 }point;

 point image_dimension = {640,480};

或者,如果您希望按照不同的顺序设置它的值:

point img_dim = { .y = 480, .x = 640 };

工会与结构

联合声明与结构相同,但不同,因为联盟中只能使用一个项目。

typedef union{
      int circle;
      int triangle;
      int ovel;
 }shape;

在这种情况下,您应该使用union ,只应用一个条件,并且只使用一个变量。 请不要忘记我们也可以使用我们全新的数据类型:

typedef struct{
      char* model;
      int year;
 }car_type;

 typedef struct{
      char* owner;
      int weight;
 }truck_type;

 typedef union{
  car_type car;
  truck_type truck;
 }vehicle;

还有一些技巧

  • 使用&运算符创建指向结构的指针时,可以使用特殊的->缀运算符来对其进行处理。例如,在C中使用链接列表时,这非常常用
  • 新定义的类型可以像几乎所有的其他基本类型一样使用。例如,尝试创建一个类型为student的数组,并查看它是如何工作的。
  • 结构可以复制或分配,但你无法比较它们!

更多C语言教程

这里有更多完整C语言教程