C语言 结构体

  1. 结构体的概念
    • 在C语言中,结构体(struct)是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个逻辑上相关的整体。它类似于一个容器,可以容纳多种不同类型的数据项。
  2. 结构体的定义
    • 结构体的定义语法如下:
      struct 结构体名 {
          成员类型1 成员名1;
          成员类型2 成员名2;
          //...
          成员类型n 成员名n;
      };
      
      例如,定义一个表示学生信息的结构体:
      struct Student {
          char name[20];
          int age;
          float score;
      };
      
    • 这里定义了一个名为Student的结构体,它包含三个成员:一个字符数组name用于存储学生姓名,一个整数age用于存储学生年龄,一个浮点数score用于存储学生成绩。
  3. 结构体变量的声明与初始化
    • 声明
      • 可以在结构体定义之后声明结构体变量。例如:
        struct Student stu1;
        
      • 也可以在定义结构体的同时声明结构体变量:
        struct Student {
            char name[20];
            int age;
            float score;
        } stu2;
        
    • 初始化
      • 结构体变量可以在声明时进行初始化。例如:
        struct Student stu3 = {"Tom", 18, 90.5};
        
      • 还可以通过指定成员来初始化:
        struct Student stu4 = {.age = 19,.score = 88.0,.name = "Jerry"};
        
  4. 结构体成员的访问
    • 使用点(.)运算符来访问结构体变量的成员。例如:
      struct Student stu = {"Alice", 20, 95.0};
      printf("Name: %s, Age: %d, Score: %f\n", stu.name, stu.age, stu.score);
      
    • 如果是指向结构体的指针,则使用箭头(->)运算符来访问成员。例如:
      struct Student *pStu = &stu;
      printf("Name: %s, Age: %d, Score: %f\n", pStu->name, pStu->age, pStu->score);
      
  5. 结构体的嵌套
    • 结构体中可以嵌套其他结构体。例如:
      struct Date {
          int year;
          int month;
          int day;
      };
      
      struct Student {
          char name[20];
          int age;
          struct Date birthday;
          float score;
      };
      
      要访问嵌套结构体中的成员,可以使用多级点运算符或者箭头运算符(如果是指针的话)。例如:
      struct Student stu = {"Bob", 21, {2000, 5, 10}, 92.0};
      printf("Birthday: %d - %d - %d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
      
  6. 结构体数组
    • 可以定义结构体数组,它是一组具有相同结构体类型的元素。例如:
      struct Student students[3];
      
      初始化结构体数组的方法如下:
      struct Student students[3] = {{"Mike", 18, 85.0}, {"John", 19, 90.0}, {"Lily", 20, 92.0}};
      
      访问结构体数组元素的成员与访问单个结构体变量的成员类似。例如:
      for (int i = 0; i < 3; i++) {
          printf("Student %d: Name: %s, Age: %d, Score: %f\n", i + 1, students[i].name, students[i].age, students[i].score);
      }
      
  7. 结构体在函数中的使用
    • 结构体可以作为函数的参数传递,也可以作为函数的返回值。
    • 结构体作为参数传递
      • 当结构体作为参数传递给函数时,默认是按值传递,这意味着整个结构体内容会被复制一份传递给函数。例如:
        void printStudent(struct Student stu) {
            printf("Name: %s, Age: %d, Score: %f\n", stu.name, stu.age, stu.score);
        }
        
      • 如果结构体较大,按值传递可能会导致效率低下,可以使用指针传递来提高效率。例如:
        void modifyStudent(struct Student *pStu) {
            pStu->age++;
        }
        
    • 结构体作为返回值
      • 函数也可以返回结构体。例如:
        struct Student createStudent() {
            struct Student newStu = {"New Student", 18, 88.0};
            return newStu;
        }
        

结构体在C语言中是一种非常有用的数据组织工具,可以方便地处理复杂的数据结构,提高代码的模块化和可读性。

posted @ 2024-10-01 22:20  西北野狼  阅读(39)  评论(0编辑  收藏  举报