前言
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