Я просматривал SO и нашел некоторый код , который поднял вопрос для меня.
struct node* BuildOneTwoThree() {
struct node *list = malloc(3 * sizeof(struct node));
list[0].data = 1;
list[0].next = list+1;
list[1].data = 2;
list[1].next = list+2;
list[2].data = 3;
list[2].next = NULL;
return list;}
Я пытаюсь понять, как работает этот вызов malloc и что он возвращает.Вернул ли он массив указателей?Как это работает, я не ожидал, что malloc будет работать таким образом?
Похоже, это гарантирует, что индексы памяти отдельных структур следуют один за другим, что, я думаю, может быть мощным или полезным инструментом.
Также после такого вызова malloc будет нормально инициализировать индексы массива как
list[0] = (struct node) {1, list +1};
Примечание: узел структуры определен как,
struct node{
int data;
struct node *next;};