如何检查结构是否在C中初始化?

时间:2015-03-29 23:48:50

标签: c

我声明了一个结构,我想检查它是否已经初始化。我该怎么做?

我试过了:

struct mystruct str1;

if(str1 != NULL)

if(str1->name != NULL)

struct是一个链表,还包含int和char等类型的属性。

1 个答案:

答案 0 :(得分:6)

如果在包含main() 的任何函数声明 之外的结构,则结构及其内容将初始化为零。正如评论中指出的那样,这对于不同的数据类型意味着不同的东西。

  1. 整数(例如char,short,int,long,unsigned,unsigned int,long long等)将为0
  2. float和double将是数字0.0 [但它们所包含的字节可能不是]
  3. 指针将为NULL
  4. struct padding可能未定义。
  5. 数组将根据其类型归零。
  6. 如果在函数中定义结构或任何非静态变量,则它们是未定义的。在某些实现中,它们碰巧包含许多实现中堆栈上的内容,但这取决于体系结构。在任何情况下,您可以假设在函数中声明的结构,数组和变量没有前面的静态单词未初始化并包含垃圾

    您通常不会测试是否初始化结构,您只需要知道您定义的情况,以及是否已初始化它(及其子元素)。

    确定结构体是否已初始化的唯一方法是检查结构中的每个元素,看它是否与您认为该元素的初始化值相匹配。如果要检查指向结构的指针是否初始化为预定义状态,您只需查看它是否包含NULL或您初始化它的特定地址。