嵌入式学习笔记 - C语言中结构体的定义,以及结构体变量的内存空间的分配
在C语言中,定义结构体本身不会自动分配内存,只有在创建结构体变量时才会分配内存。结构体是一种复合数据类型,用于将不同类型的数据组合成一个整体。定义结构体时,只是定义了一个数据结构的形式,并没有实际分配内存空间。只有在创建结构体变量时,系统才会根据结构体成员的大小和数量,为其分配相应的内存空间12。
结构体的定义和内存分配
-
定义结构体:在C语言中,通过
struct
关键字定义结构体。例如:struct Student {
char name; int age; };
这个定义只是声明了一个名为Student
的结构体类型,并没有分配内存空间。通常所说的结构体是指结构体类型。结构体变量才是真正的结构体。 -
分配内存:创建结构体变量时,系统会为其分配内存空间。例如:
struct Student stu1; // 分配内存空间给stu1
此时,
stu1
占用的内存空间包括name
数组和age
变量所需的空间。
动态内存分配与静态内存分配
-
静态分配:在编译时确定内存大小,适用于结构体大小已知且较小的情况。例如:
struct Person p; // 编译时分配内存
-
动态分配:在运行时动态分配内存空间,适用于结构体大小未知或较大的情况。例如:
struct Person* p = (struct Person*)malloc(sizeof(struct Person)); // 运行时分配内存 if (p != NULL) { p->name = (char*)malloc(20 * sizeof(char)); // 为结构体中的指针成员单独分配内存 }// 使用完毕后需要释放内存 free(p->name); free(p);