Я не могу понять этот 3-строчный код, используемый для реализации статический связанный список. Это на самом деле ответ на этот вопрос question.Как этот код действительно работает?
Я отправляю код здесь снова- (основное действие в основном вторая линия)
struct node {int x; struct node *next;};
#define cons(x,next) (struct node[]){{x,next}}
struct node *head = cons(1, cons(2, cons(3, cons(4, NULL))));
Мой вопрос - какова функциональность этого заявления? (struct node[]){{x,next}}
. Является ли это инструкцией инициализации и что она возвращает, что она может быть назначена на struct node*
?
Его можно записать как '#define cons (x, next) (struct node *) {x, next}', почему он использовал дополнительную скобку? вероятно, избыточный. – coderredoc
И память выделяется из памяти стека не из кучи, поскольку динамическое распределение не используется. – coderredoc
Нет отливки. Он может выглядеть как один, но '() {}' - просто оператор составного литерала. – cremno