如何检查结构是否在C中初始化?
我声明了一个结构,我想检查它是否已经初始化。我该怎么做 我试过:如何检查结构是否在C中初始化?,c,C,我声明了一个结构,我想检查它是否已经初始化。我该怎么做 我试过: struct mystruct str1; if(str1 != NULL) if(str1->name != NULL) 该结构是一个链表,还包含int和char等类型的属性。如果在任何函数(包括main())之外声明该结构,则该结构及其内容将初始化为零。正如评论中指出的那样,对于不同的数据类型,这意味着不同的事情 整数(例如char、short、int、long、unsigned、unsigned int、long
struct mystruct str1;
if(str1 != NULL)
if(str1->name != NULL)
该结构是一个链表,还包含int和char等类型的属性。如果在任何函数(包括main()
)之外声明该结构,则该结构及其内容将初始化为零。正如评论中指出的那样,对于不同的数据类型,这意味着不同的事情
确定结构是否已初始化的唯一方法是检查其中的每个元素,看看它是否与您认为该元素的初始化值应该匹配。如果要检查指向结构的指针是否已初始化为预定义状态,只需查看它是否包含NULL或初始化到的特定地址。当然,它不会自动初始化。只要跟踪初始化它的时间就可以了?如果我没有弄错的话,简写的去引用->语法只用于指针。它们既不能保证全部
0
,也不能保证NULL
<代码>结构成员初始化为适当的零表示形式。指针是NULL
'd、float
s和double
s,它们获取表示零的任何值,并且正常整数被归零。另一方面,填充物未被触碰。@a3f-感谢您的澄清。这是一个重要的区别。但它们被初始化为合理的值。一般来说,没有人关心填充,但在极少数情况下,这可能很重要,人们通常会检查浮点数和double是否为零,但您的观点是,如果您通过引用或强制转换它们,它们可能不是零。谢谢。同意最迂腐的例外:“它们包含堆栈上的任何内容”可能是真的,也可能不是真的。C甚至没有指定堆栈。(请参阅哈佛体系结构在许多嵌入式处理器中的使用。贝斯特说,本地非静态值未定义,请保持不变。另一个细节:“确定是否初始化了结构将检查每个元素”可能导致UB。例如,一个值可能有一个陷阱值,因此在设置它之前读取是程序的结束。@chux,我将根据您和a3f所说的内容更新我的答案。