对一个结构体变量赋值为{0},这个变量里面的所以结构体成员的值均= 0 吗

时间:2021-06-08 10:40:24
有结构体
typedef struct  LsAfccDataWriteReqTag 
{
  TaskId                       taskId; 
  Int32                        dataID;      
  Int32                        offset;      
  Int8                         oprt;        
  union LSAFCC_Data              data;        
}
LsAfccDataWriteReq;
定义变量
LsAfccDataWriteReq req = {0};

这样req的各个变量的值=0吗

10 个解决方案

#1


相当于
memset(&req, 0, sizeof(LsAfccDataWriteReq));

#2


是的 
对数组也是可以这样初始化为0

#3


是的

#4


原来如此,  这是编译器完成的么

#5


谢谢各位了.

另外,
有下面的结构体
struct A
{
bool duan ;
};
 
定义一个A a;

我再代码中不初始化a
而直接使用a.duan
那么这个a.duan的默认值是什么啊
随机的吗
谢谢啊
马上就结贴

#6


如果a是全局的或者静态的编译器就默认初始化为0, 如果局部的(栈上分配)则为随机值。

另外,

typedef   struct     LsAfccDataWriteReqTag   

    TaskId                                               taskId;   
    Int32                                                 dataID;             
    Int32                                                 offset;             
    Int8                                                   oprt;                 
    union   LSAFCC_Data                             data;                 

LsAfccDataWriteReq; 

如果在栈上分配这个结构并且只初始化第一个字段,如:
main()
{
...

LsAfccDataWriteReq   req   =   {1}; 

...
}
,那么req剩下的字段默认初始化为0(不是随机值!)


#7


数组同样是这样,如果栈上的数组没有初始化,则为随机值,如果初始化了第一个变量或者前几个变量,则后面的变量默认初始化为0

#8


楼上的,
这些变量的默认值有没有和编译器相关
比如说某个编译器把分配再栈上的req的变量全自己初始化为0
谢谢你了

#9


没人回答吗

#10


这些变量的默认值有没有和编译器相关 
====================================
和编译器无关
语言本身的规定

#1


相当于
memset(&req, 0, sizeof(LsAfccDataWriteReq));

#2


是的 
对数组也是可以这样初始化为0

#3


是的

#4


原来如此,  这是编译器完成的么

#5


谢谢各位了.

另外,
有下面的结构体
struct A
{
bool duan ;
};
 
定义一个A a;

我再代码中不初始化a
而直接使用a.duan
那么这个a.duan的默认值是什么啊
随机的吗
谢谢啊
马上就结贴

#6


如果a是全局的或者静态的编译器就默认初始化为0, 如果局部的(栈上分配)则为随机值。

另外,

typedef   struct     LsAfccDataWriteReqTag   

    TaskId                                               taskId;   
    Int32                                                 dataID;             
    Int32                                                 offset;             
    Int8                                                   oprt;                 
    union   LSAFCC_Data                             data;                 

LsAfccDataWriteReq; 

如果在栈上分配这个结构并且只初始化第一个字段,如:
main()
{
...

LsAfccDataWriteReq   req   =   {1}; 

...
}
,那么req剩下的字段默认初始化为0(不是随机值!)


#7


数组同样是这样,如果栈上的数组没有初始化,则为随机值,如果初始化了第一个变量或者前几个变量,则后面的变量默认初始化为0

#8


楼上的,
这些变量的默认值有没有和编译器相关
比如说某个编译器把分配再栈上的req的变量全自己初始化为0
谢谢你了

#9


没人回答吗

#10


这些变量的默认值有没有和编译器相关 
====================================
和编译器无关
语言本身的规定