Решение 1:
#include <stdlib.h>
#include <stdio.h>
typedef struct node
{
int data;
struct node * after;
struct node * before;
}node;
int main() {
struct node* head = (struct node *)malloc(sizeof(struct node)); //allocate memory
*head = (struct node){10,head,head}; //cast to struct node
printf("%d", head->data);
}
Что-то столь же простое, как struct node *head = {10, head, head}
не будет работать, потому что вы не выделили память для структуры (int и два указателя).
Решение 2:
#include <stdlib.h>
#include <stdio.h>
typedef struct node
{
int data;
struct node * after;
struct node * before;
}node;
int main() {
struct node* head = &(struct node){10,head,head};
printf("%d", head->data);
}
Это выйдет за рамки - Решение 1 является превосходным по этой причине, и, поскольку вы создаете связанный список, я думаю, вам нужно выделенная память кучи - не выделен стек.