В C по крайней мере один из node.next->prev
и node->next->prev
не будет компилироваться.
Если node
объявлен как указатель на структуру (скажем, struct Node* node
), тогда вы не можете использовать оператор .
на нем, потому что .
может применяться только к честным struct
s, а не к указателям на них. В этом случае node.next->prev
не будет компилироваться, а node->next->prev
будет. И наоборот, если node
определено как фактическая честность struct
(скажем, struct Node node
), то node->next->prev
не будет компилироваться, поскольку ->
может применяться только к указателям, тогда как node.next->prev
воля.
При этом, намерение за этими двумя частями кода одинаково. Они оба означают «go для какого-либо узла, выберите его поле next
, а затем прочитайте поле prev
любого узла, который есть».