我们使用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语言结构体初始化时,使用一组空的花括号就可以很简单的实现初始化了。
如果有写的不对的地方,希望能留言指正,谢谢阅读。
来源:CSDN
作者:爱是恒久忍耐1989
链接:https://blog.csdn.net/whahu1989/article/details/103641978