C语言结构体初始化的小技巧

≡放荡痞女 提交于 2019-12-22 03:58:25

我们使用C去新建结构体变量时,如果这个变量是局部变量,那么其成员变量的默认初始值就是随机值,所以一般在创建变量时会对其成员的值进行初始化。

本文会介绍一种操作简单的结构体初始化方法,并与常规初始化方式进行对比,下面举例说明这个过程,


一 常规初始化

假设结构体类型定义如下,

struct Test
{
	int a;
	int b;
	char c;
	double d;
};

我们在main()函数里新建变量,不做初始化,然后打印其成员值,

int main(void)
{
    struct Test test;
    printf("test.a: %d, test.b: %d, test.c: %c, test.d: %f\n", 
    			test.a, test.b, test.c, test.d);

    return 0;
}

输出如下,
在这里插入图片描述
可以看出大部分都是随机值(除了double,不过这个应该和具体编译器有关)

下面使用常规初始化方式,主要有2种,一种是挨个成员赋值,一个是使用memset()去把整个变量所占的内存空间清0,都比较麻烦,

int main(void)
{
    // 挨个初始化
    struct Test test1 = {.a=0, .b=0, .c=0, .d=0.0};
    printf("test1.a: %d, test1.b: %d, test1.c: %c, test1.d: %f\n", 
    			test1.a, test1.b, test1.c, test1.d);
    
    //使用memset()
    struct Test test2;
    memset(&test2, 0, sizeof(test2));
    printf("test2.a: %d, test2.b: %d, test2.c: %c, test2.d: %f\n", 
    			test2.a, test2.b, test2.c, test2.d);

    return 0;
}

二 巧妙而简单的初始化

只需要使用一组花括号就可以了,如下,

int main(void)
{
	struct Test test = {};
	printf("test.a: %d, test.b: %d, test.c: %c, test.d: %f\n", 
    			test.a, test.b, test.c, test.d);
}

打印如下,
在这里插入图片描述


三 小结

C语言结构体初始化时,使用一组空的花括号就可以很简单的实现初始化了。

如果有写的不对的地方,希望能留言指正,谢谢阅读。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!