在C语言编程中,咱们其实能够关上编程语言的拘谨,本人定义本人想要的数据类型。只有记住 struct 和 typedef 两个关键词,咱们就能够通过C语言中的数据结构和共用体来保留非同质化的数据类型。

定义新的数据类型

首先,在C语言在线编译器中输出以下代码:

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

实现后,这段代码会把 student 预存为保留词,那样咱们能创立 student 类型的变量了。

那么这个新变量到底是怎么形成的呢?
咱们所创立的这个结构化新变量是通过一系列根底变量组成的。在下面的代码中,咱们把 char name、char surname 这些变量组成了新的 student 变量中,其实就是放到内存块的一个名下。

应用新数据类型

咱们当初创立好新的 student 变量后,能够在C语言在线编译器中为它初始化一些属性:

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

共用体 vs 构造

共用体(Union)的阐明形式与 struct 雷同,但他们却不太一样。在共用体中,咱们只能够应用同一种类型的数据。像这样:

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

只有在数据类型雷同的状况下,才会应用 union。咱们能够在C语言在线编译器中尝试一下咱们的新数据类型:

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;

其余小技巧

  • 当咱们应用 & 运算符为构造创立一个指针时,咱们也能够应用非凡的 -> inflix运算符来进行表白。
  • 在C语言在线编译器中,咱们甚至能够像根底的数据类型那样任意应用咱们的新数据类型。
  • 咱们能够复制或指定 struct 的值,但咱们不能对它们进行比照!