为了孩子他娘而奋斗

为了孩子他娘而奋斗

C语言结构体学习笔记

1、什么是结构体

结构体是一种用户自定义的数据类型,用于将不同类型的数据组合成一个有机整体。
例如,一个学生可以包含以下属性:

 int num;
char name[20];
char sex;
int age;
char addr[30];

这些属性可以通过结构体统一管理。


2、结构体声明和定义

2.1 声明模板

 struct student_t {
    char name[25];
    int age;
    int number;
};

student_t 是结构体的类型名,不是变量名。此时并未分配内存,只有声明模板。

2.2 定义变量

可以通过以下方式定义变量:

struct student_t student1, student2;

也可以在声明结构体的同时定义变量:

 struct student_t {
    char name[25];
    int age;
    int number;
} student1, student2;

3、结构体变量初始化

结构体变量可以在声明时初始化:

 struct employee {
    int id;
    char name[20];
} emp1 = {1, "Alice"}, emp2 = {2, "Bob"};

注意:未初始化的成员会保留默认值。


4、访问结构体成员

通过 . 运算符 访问结构体成员:

 printf("Name: %s\n", emp1.name);
printf("ID: %d\n", emp1.id);

5、sizeof 运算符

可以使用 sizeof 运算符查看结构体的内存大小:

 struct test {
    int num1;
    char ch;
    int num2;
};
printf("Size of struct: %zu\n", sizeof(struct test));

注意:结构体的大小受 内存对齐 的影响。


6、结构体嵌套

结构体可以嵌套使用:

 struct book {
    char title[30];
    char author[20];
    float price;
};

struct borrower {
    int id;
    char name[20];
    struct book borrowed_book;
} borrower1 = {1, "John", {"C Programming", "Dennis Ritchie", 30.0}};

访问嵌套结构体成员:

 printf("Borrower: %s\n", borrower1.name);
printf("Book Title: %s\n", borrower1.borrowed_book.title);

7、结构体数组

结构体可以作为数组元素:

 struct student_t students[3] = {
    {"Alice", 20, 1001},
    {"Bob", 21, 1002},
    {"Charlie", 19, 1003}
};

访问数组成员:

printf("Student Name: %s\n", students[1].name);

8、结构体作为函数参数和返回值

8.1 作为参数

默认是 按值传递

 void printStudent(struct student_t student) {
    printf("Name: %s, Age: %d\n", student.name, student.age);
}

8.2 作为返回值

 struct student_t createStudent() {
    struct student_t student = {"Diana", 22, 1004};
    return student;
}

9、typedef 关键字

使用 typedef 为结构体定义新名字:

 typedef struct student_t {
    char name[25];
    int age;
    int number;
} Student;

Student student1 = {"Eve", 23, 1005};

10、示例代码:学生信息管理

 #include <stdio.h>
#include <string.h>

struct student {
    int id;
    char name[20];
    int age;
};

void printStudent(struct student s) {
    printf("ID: %d, Name: %s, Age: %d\n", s.id, s.name, s.age);
}

int main() {
    struct student s1 = {1, "Alice", 20};
    struct student s2;
    s2.id = 2;
    strcpy(s2.name, "Bob");
    s2.age = 21;

    printStudent(s1);
    printStudent(s2);

    return 0;
}
12-27 03:49