• C语言结构体初始化的四种方法(转载)


     原文:https://blog.csdn.net/ericbar/article/details/79567108

    定义

    struct InitMember
    {
        int first;
        double second;
        char* third;
        float four;
    };

    方法一:定义时赋值

    struct InitMember test = {-10,3.141590,"method one",0.25};

    需要注意对应的顺序,不能错位。

    方法二:定义后逐个赋值

    struct InitMember test;
    
    test.first = -10;
    test.second = 3.141590;
    test.third = "method two";
    test.four = 0.25;

    因为是逐个确定的赋值,无所谓顺序啦。

    方法三:定义时乱序赋值(C风格)

    这种方法类似于第一种方法和第二种方法的结合体,既能初始化时赋值,也可以不考虑顺序;

    struct InitMember test = {
        .second = 3.141590,
        .third = "method three",
        .first = -10,
        .four = 0.25
    };

    这种方法在Linux内核kernel)中经常使用,在音视频编解码库FFmpeg中也大量频繁使用,还是很不错的一种方式。

    方法四:定义时乱序赋值(C++风格)

    这种方法和前一种类似,网上称之为C++风格,类似于key-value键值对的方式,同样不考虑顺序。

    struct InitMember test = {
        second:3.141590,
        third:"method three",
        first:-10,
        four:0.25
    };

    写在后面

    其实问题的引出是在分析FFmpeg源代码时,发现大量的结构体乱序赋值初始化的方式,以前在C语言教材上没有发现这种用法,于是学习总结一下,放到这里存档。

  • 相关阅读:
    面向对象的三个基本特征
    OGRE启动过程详解(OGRE HelloWorld程序原理解析)
    Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)
    windows下Bullet 2.82编译安装(Bullet Physics开发环境配置)
    1303: Decimal
    分组背包,每组最多选1个
    椒盐效果
    自我介绍
    题目1539:师弟
    upper_bound()
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/10332749.html
Copyright © 2020-2023  润新知