C语言 结构体

C语言 结构体是由单个名称表示的不同数据类型的一组变量。让我们举一个例子来理解 C 编程中结构的需要。

让我们说我们需要存储学生的数据,如学生姓名,年龄,地址,身份证等。这样做的一种方法是为每个属性创建一个不同的变量,但是当你需要存储多个学生的数据时,那么例如,您需要为每个学生再次创建这几个变量。以这种方式存储数据非常令人头疼。

我们可以通过使用结构轻松解决这个问题。我们可以创建一个具有nameidaddressage成员的结构,然后我们可以为每个学生创建这个结构的变量。这可能听起来令人困惑,不要担心我们会在示例的帮助下理解这一点。

如何在 C 编程中创建一个结构

我们使用 struct 关键字在 C 中创建结构。struct关键字是结构化数据类型的简短形式。

struct struct_name {
   DataType member1_name;
   DataType member2_name;
   DataType member3_name;
   …
};

这里struct_name可以是你选择的任何东西。成员数据类型可以相同或不同。一旦我们声明了结构,我们就可以使用struct name作为数据类型,如intfloat等。

首先,我们将看到创建struct变量,访问struct成员等的语法,然后我们将看到一个完整的示例。

如何声明结构的变量?

struct  struct_name  var_name;

或者:

struct struct_name {
   DataType member1_name;
   DataType member2_name;
   DataType member3_name;
   …
} var_name;

如何使用结构变量访问结构的数据成员?

var_name.member1_name;
var_name.member2_name;
…

如何为结构成员赋值?

有三种方法可以做到这一点。

1)使用点(.)运算符

var_name.memeber_name = value;

2)在一个声明中赋值所有成员

struct struct_name var_name = 
{value for memeber1, value for memeber2 …so on for all the members}

3)指定初始值设定项 – 我们将在本文末尾讨论这个问题。

C 中的结构示例

#include <stdio.h>
/* Created a structure here. The name of the structure is
 * StudentData.
 */
struct StudentData{
    char *stu_name;
    int stu_id;
    int stu_age;
};
int main()
{
     /* student is the variable of structure StudentData*/
     struct StudentData student;

     /*Assigning the values of each struct member here*/
     student.stu_name = "Steve";
     student.stu_id = 1234;
     student.stu_age = 30;

     /* Displaying the values of struct members */
     printf("Student Name is: %s", student.stu_name);
     printf("\nStudent Id is: %d", student.stu_id);
     printf("\nStudent Age is: %d", student.stu_age);
     return 0;
}

输出:

Student Name is: Steve
Student Id is: 1234
Student Age is: 30

C 中的嵌套结构:另一个结构中的结构

您可以在另一个结构中使用结构,这是相当可能的。正如我上面所解释的,一旦你声明了一个结构, struct struct_name 就像一个新的数据类型,所以你可以把它包含在另一个结构中,就像其他数据成员的数据类型一样。听起来很混乱?别担心。以下示例将清除您的疑问。

C 编程中嵌套结构的例子

假设我们有两个这样的结构:

结构 1:stu_address

struct stu_address
{
     int street;
     char *state;
     char *city;
     char *country;
}

结构 2:stu_data

struct stu_data
{
    int stu_id;
    int stu_age;
    char *stu_name;
    struct stu_address stuAddress;
}

正如你在这里看到的那样,我在另一个结构中嵌套了一个结构。

结构内部结构的赋值(嵌套结构)

让我们以上面看到的两个结构为例来理解逻辑

struct  stu_data  mydata;
mydata.stu_id = 1001;
mydata.stu_age = 30;
mydata.stuAddress.state = "UP"; //Nested struct assignment
..

如何访问嵌套结构成员?

使用.运算符链。

假设你想从嵌套结构中单独显示城市:

printf("%s",  mydata.stuAddress.city);

在结构中使用typedef

typedef使代码简短并提高了可读性。在上面的讨论中,我们已经看到,每次使用结构时我们都必须使用冗长的语法,这会使代码混乱,冗长,复杂且可读性降低。这个问题的简单解决方案是使用typedef。它就像struct的别名。

没有typedef的代码

struct home_address {
  int local_street;
  char *town;
  char *my_city;
  char *my_country;
};
...
struct home_address var; 
var.town = "Agra";

使用typedef的代码

typedef struct home_address{
  int local_street;
  char *town;
  char *my_city;
  char *my_country;
}addr;
..
..
addr var1;
var.town = "Agra";

每次需要声明struct变量时,不必使用struct home_address,只需使用addr,即我们定义的typedef

指定初始值设定项以设置结构成员的值

我们已经学会了两种设置struct成员值的方法,还有另一种方法可以使用指定的初始化器来完成相同的操作。当我们只赋值结构的少数成员时,这很有用。在以下示例中,结构变量s2只有一个赋值的成员。

#include <stdio.h>
struct numbers
{
   int num1, num2;
};
int main()
{
   // Assignment using using designated initialization
   struct numbers s1 = {.num2 = 22, .num1 = 11};
   struct numbers s2 = {.num2 = 30};

   printf ("num1: %d, num2: %d\n", s1.num1, s1.num2);
   printf ("num1: %d", s2.num2);
   return 0;
}

输出:

num1: 11, num2: 22
num1: 30

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程