C语言结构体初始化

结构体是c语言中重要的复合类型,初始化的方法很多,下面总结如下:
结构体定义:

#define MAX 10
typedef struct _TEST_T {
        int i;
        int array[MAX];
}TEST_T;

1、 初始化
TEST_T st ={1,{1,2}};//可以初始化,设置i为1,array初始化个数小于实际.;
TEST_T st ={2};//初始化个数少于实际个数时,只初始化前面的成员;
TEST_T st ={.array={1,2}};//有选择的初始化成员;
TEST_T st ={.array={[0 … MAX-1]=5}};//批量选择的初始化成员(c99标准)

2、 复合字面量
st=(TEST_T) {1,{1,2}};//这是一个赋值语句,故需声明,可以出现在程序的任何地方。
当然也可以使用复合字面量来有选择初始化:
st=(TEST_T){.array={[0 … MAX-1]=5}};

3、 结构体数组初始化
可以用多个大括号括起来:
TEST_T st[10] = {{},{},{},{}}
也可以初始化其中的一个元素:
TEST_T st[10] = {[2]={}, [3]={}}
也可以使用复合字面量:
TEST_T st[10] = {[2].i=0, [3].i={}}

4、 使用库函数
常用的函数有两个:memset和bzero。用法如下:
memset(&st, 0, sizeof (TEST_T;));
bzero(&set, sizeof (TEST_T;));
memset和bzero的主要区别是:参数个数不同;memset 需要三个参数,其中第二个参数是&st指向的内存中要初始化的值,而bzero使用0来初始化。

参考文章链接:
c语言的结构体的初始化
How to initialize all members of an array to the same value

猜你喜欢

转载自blog.csdn.net/asd542230642/article/details/52549453