Я пишу структуру
struct Tree{ struct Node *root; struct Node NIL_t; struct Node * const NIL; //sentinel }
хочу
struct Node * const NIL = &NIL_t;
Я не могу инициализировать его внутри структуры. Я использую msvs.
Я использую C, а не C ++. Я знаю, что могу использовать список инициализации в C ++.
Как это сделать в C?
Если вы используете C99, вы можете использовать назначенные инициализаторы для этого:
struct Tree t = { .root = NULL, .NIL = &t.NIL_t };
Это работает только в C99. Я проверял это на gcc, и, кажется, он работает нормально.
Структура определяет шаблон данных, но сама не имеет данных.Поскольку у него нет данных, его невозможно инициализировать.
С другой стороны, если вы хотите объявить экземпляр, вы можете его инициализировать.
Для тех, кто ищет простой пример, вот оно:
#include <stdio.h> typedef struct { const int a; const int b; } my_t; int main() { my_t s = { .a = 10, .b = 20 }; printf("{ a: %d, b: %d }", s.a, s.b); }
Создает следующий вывод:
{ a: 10, b: 20 }
Может быть, что-то вроде этого будет достаточно?
struct { struct Node * const NIL; struct Node *root; struct Node NIL_t; } Tree = {&Tree.NIL_t};