C语言中两种结构体成员初始化方式:顺序和乱序

  1. 前言
  2. 1、参考
  3. 2、两种结构体成员初始化方式:顺序和乱序
  4. 3、编程实战
  5. THE END!

前言

    C语言中的结构体类型在进行成员初始化时,我们通常采用顺序初始化的方式。今天,在看同事写的代码时,发现还可以采用乱序的方式进行初始化,并且这种方式可以明确指定每个成员的值,看起来比较清晰。

1、参考

关于linux中内核编程中结构体的赋值操作 (结构体指定初始化)
C基础–结构体成员初始化方式
浅谈结构体内变量赋值问题
C—动态内存分配之malloc与realloc的区别

2、两种结构体成员初始化方式:顺序和乱序

顺序:

typedef struct _data_t {
    int a;
    int b;
}data_t;

data_t data = {10,20};

乱序:

typedef struct _data_t {
    int a;
    int b;
}data_t;

data_t data = {
   .a = 10,
   .b = 20,
};

3、编程实战

#include <stdio.h>
#include <Windows.h>

typedef struct _circle_s
{
    float radius;
    int perimeter;
} circle_s;

int main(int argc, char **argv)
{
#if 0 //结构体顺序初始化
    circle_s cir = {10.0, 20};
#endif

#if 1 //结构体乱序初始化,需要支持C99规范的编译器支持
    circle_s cir =
    {
        .radius = 20.0,
        .perimeter = 40,
    };
#endif
    printf("radius: %f, perimeter: %d\n", cir.radius, cir.perimeter);
    system("pause");
    return 0;
}

注:

  • 结构体乱序初始化是C99中的新特性,需要支持C99规范的编译器支持,比如VS2013编译器cl.exe,但是VS2010编译器就不支持C99规范(支持C89规范)。
  • linux内核中就是采用乱序这种方式初始化struct。

THE END!



本博文只能阅读,谢绝转载,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2963033731@qq.com

文章标题:C语言中两种结构体成员初始化方式:顺序和乱序

字数:404

本文作者:Soaring Lee

发布时间:2018-05-14, 15:13:47

最后更新:2021-06-14, 12:13:44

原始链接:https://soaringleefighting.github.io/2018/05/14/【C系列】两种结构体成员初始化方式:顺序和乱序/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏

相册