1 综述
今天看到几行代码:
if(!A)
{
}
else
{
}
其中A是结构体变量,犹豫了一下,这么简单的东西不应该啊,因此做个学习。
2 结构体变量的值
有如下结构体:
typedef struct LsAfccDataWriteReqTag
{
TaskId TaskId;
Int32 DataID;
Bool OnOff;
Int8 Oprt;
union LSAFCC_Data Data;
}LsAfccDataWriteReq;
我们可以直接用下面的代码将结构体变量设置为0:
LsAfccDataWriteReq req = {0};
上面这行代码相当于下面这行代码:
memset(&req, 0, sizeof(LsAfccDataWriteReq));
实际上,如果req是全局的或者静态的编译器就默认初始化为0, 如果局部的(栈上分配)则为随机值。
如果在栈上分配这个结构并且只初始化第一个字段,如:
LsAfccDataWriteReq req = {1};
那么req剩下的字段默认初始化为0(不是随机值!)
3 结语
实际上,数组同样是这样,如果栈上的数组没有初始化,则为随机值,如果初始化了第一个变量或者前几个变量,则后面的变量默认初始化为0。
参考文献
本文是根据本帖整理而来。
【2016-07-06】