MST

星途 面试题库

面试题:C语言结构体变量声明的常见方式及区别

请详细描述C语言中结构体变量声明的三种常见方式(先定义结构体类型再声明变量、定义结构体类型的同时声明变量、匿名结构体声明变量),并说明它们在使用场景和内存分配等方面的区别。
30.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

1. 先定义结构体类型再声明变量

  • 定义方式
// 定义结构体类型
struct Student {
    char name[20];
    int age;
    float score;
};
// 声明结构体变量
struct Student stu1, stu2;
  • 使用场景:适用于需要多次声明同类型结构体变量的场景,比如在一个管理学生信息的系统中,可能需要创建多个学生结构体变量,这种方式定义清晰,便于代码维护和复用。
  • 内存分配:在声明结构体变量(如stu1stu2)时,系统根据结构体类型struct Student的大小,为每个变量分配独立的内存空间。每个变量的内存空间是连续的,其大小为结构体中所有成员大小之和(考虑内存对齐)。

2. 定义结构体类型的同时声明变量

  • 定义方式
struct Student {
    char name[20];
    int age;
    float score;
} stu1, stu2;
  • 使用场景:适用于仅需在当前位置声明少量该结构体变量的情况,例如在一个函数内部,仅需要一两个特定结构体变量时,这种方式可以简化代码结构。
  • 内存分配:与先定义结构体类型再声明变量类似,在定义的同时声明的变量(stu1stu2),系统同样根据结构体类型的大小为它们各自分配独立的连续内存空间,内存大小计算遵循内存对齐规则。

3. 匿名结构体声明变量

  • 定义方式
struct {
    char name[20];
    int age;
    float score;
} stu1, stu2;
  • 使用场景:适用于仅在当前代码段使用一次且不会在其他地方复用的结构体变量场景,例如在一个临时处理数据的代码块中,不需要为结构体类型命名,减少命名空间污染。
  • 内存分配:与前两种方式一样,为声明的变量(stu1stu2)分配独立的连续内存空间,大小遵循内存对齐规则。但由于没有结构体类型名,无法在其他地方再次声明同类型变量。若要再次使用类似结构,需重新定义并声明变量。