struct node{
int data;
struct node * next;
};
Как компилятор выделяет память для «следующий» член, когда мы еще не выделена память для структуры «структуры узла»Структура распределения памяти
struct node{
int data;
struct node * next;
};
Как компилятор выделяет память для «следующий» член, когда мы еще не выделена память для структуры «структуры узла»Структура распределения памяти
next
member является указателем - переменной, которая будет содержать адрес node
, а не node
. Все указатели типа данных обычно имеют одинаковый размер, поэтому для компилятора достаточно знать, что это указатель, позволяющий вычислить его размер.
Следующая только указатель, так что имеет фиксированный размер значение в каждой машине, оно просто добавит размеры + указателя + добавление и распределение узла struct
Член следующий - указатель. Указатели имеют одинаковый размер, поэтому компилятору не нужно знать, насколько велика то, что может указывать на следующее.
Это происходит динамически, когда вы используете malloc. В противном случае ничего не выделяется. Весь компилятор просто выделяет 4 байта для указателя, который будет содержать адрес «будущей» выделенной памяти. Если вы попытаетесь получить доступ к указателю без выделения какой-либо памяти, произойдет сбой кода (вы получите доступ к некоторой недопустимой памяти в программе)
Другими словами, компилятор выделяет достаточно места для «следующего» для хранения указатель на узел в структуре узла. Чтобы на самом деле использовать «следующий», вы должны сделать другой вызов выделения, чтобы заполнить следующую структуру. – Christopher