结构体的初始化(笔记)

慢慢补充吧

先复习一下结构体类型的声明,与结构体变量的创建

    struct struct_type_name     //结构体类型名(非必须)
    {
        member_list;            //成员列表
    }struct_variable_name_list; //结构体变量名列表(非必须)

其中结构体类型名和结构体变量名列表都是不是必须的

  • 有类型名、有变量名。定义了一种结构体类型并命名,创建了一个(或多个)这种匿名类型的结构体变量
  • 有类型名,没有变量名。定义了一种结构体类型并命名,但是暂时没有创建这种类型的结构体变量
  • 没有类型名,有变量名。定义了一个匿名的结构体类型,创建了一个(或多个)这种匿名类型的结构体变量
  • 没有类型名,没有变量名。这种情况是符合语法的,但是没用。

结构体的指定初始化器

    struct StructTest
    {
        int a;
        int b;
        float f;
        double d;
    };

    struct StructTest test = {.d = 3.1};

还可以使用冒号

    struct StructTest
    {
        int a;
        int b;
        float f;
        double d;
    };

    struct StructTest test = {d : 3.1};

C语言中冒号的用处

  • 作为结构体的指定初始化器
  • 位域(Bit-Field)。主要功能是节省存储空间,降低结构体的大小。一般在内存非常宝贵的场景才会用到(如嵌入式)。位域的使用是不常见的,因为C的标准并没有规定如何对位域进行内存布局,不同的编译器对位域的处理方法可能不一样。位域的成员可以是int、unsigned int或者char类型。位域上的空间按照4个字节(int、unsigned int)或者1个字节(char)的方式来开辟。如果只有char,就一个字节一个字节进行开辟,不够了就再开辟一个字节。如果有(int、unsigned int),就四个字节四个字节进行开辟。
  • 条件语句(三目运算符)
  • 语句标签(与goto配合)
  • switch语句case后

除了第一点,其他的可以看这篇文章,不过他没有讲到第一点

c语言中冒号的用法_c语言冒号-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_63096487/article/details/133755559