带有指针初始化的C结构

Zah*_*ahy 7 c struct pointers

当实例化包含结构指针数组的结构时,我保证结构数组成员中的所有指针都将设置为NULL

这是一个示例结构:

typedef struct mmNode {
  int val;
  int board[2][NUM_PITS+1];
  int side;
  struct mmNode* children[NUM_PITS+1];
} mmNode;
Run Code Online (Sandbox Code Playgroud)

IE:如果我创建一个mmNode结构的实例,那么mmNode.children总是将元素设置为NULL

Oli*_*rth 16

这取决于您初始化结构的方式.

mmNode a;                              // Everything default-initialized

void foo()
{
    static mmNode b;                   // Everything default-initialized

    mmNode  c;                         // Nothing initialized
    mmNode  d = { 0 };                 // Everything default-initialized
    mmNode *p = malloc(sizeof(*p));    // Nothing initialized
    mmNode *q = calloc(1, sizeof(*q)); // Everything zero-initialized
}
Run Code Online (Sandbox Code Playgroud)

"没有初始化"意味着所有成员都将拥有随机的垃圾值."Default-initialized"表示所有成员都将初始化为0,指针成员将等同于0 NULL."零初始化"意味着所有内容都将按位设置为0.这仅适用于NULL以位0表示的平台.

  • @cnicutar:不."零初始化"与"空初始化"不同.指定其值为空指针文字的指针的基础表示不必是"0".`[C99:6.3.2.3/3]` (3认同)
  • @Kerrek:根据http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options,`- Wextra`启用`-Wmissing-field-initializers`,即使这个问题也会发出警告它承认它们被隐式初始化为零. (3认同)
  • @Zahy:你不能用反引号来格式化评论,但随时修改原帖!此外,"不确定"包括零的可能性 - 只是没有保证. (3认同)