C структура с инициализацией указателей - PullRequest
7 голосов
/ 14 августа 2011

Когда создается экземпляр структуры, содержащей массив указателей структур, я гарантирую, что все указатели в элементе массива struct будут установлены на NULL?

Вот пример структуры:

typedef struct mmNode {
  int val;
  int board[2][NUM_PITS+1];
  int side;
  struct mmNode* children[NUM_PITS+1];
} mmNode;

IE: если я создам экземпляр структуры mmNode, будут ли элементы mmNode.children всегда иметь значение NULL?

1 Ответ

16 голосов
/ 14 августа 2011

Зависит от того, как вы инициализируете свою структуру.

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
}

«Ничего не инициализировано» означает, что все члены будут просто иметь случайные нежелательные значения. «По умолчанию инициализируется» означает, что все члены будут инициализированы в 0, что для членов указателя будет эквивалентно NULL. «Инициализированный нулем» означает, что все будет установлено, поразрядно, на 0. Это будет работать только на платформах, где NULL представлено с побитовым 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...