zoukankan      html  css  js  c++  java
  • 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语言教材上没有发现这种用法,于是学习总结一下,放到这里存档。

  • 相关阅读:
    一个误解: 单个服务器程序可承受最大连接数“理论”上是“65535”
    Memcached 命令简介
    MySQL性能测试
    WCF 面向服务的SOAP消息
    WCF SOAP消息剖析
    深入探析 socket
    C#设计模式(适配器模式)
    LoadRunner中的异常处理
    反射调用性能比较(附源码)
    避免 TCP/IP 端口耗尽
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/10332749.html
Copyright © 2011-2022 走看看