Semantics of Assignments

typedef struct {
  int size
  collection_node *first,*last;
} collection;
Consider C1 and C2, with C2 = { 9, 1, 5 }:
C1 = C2 copies header C2 into C1:

Disaster: part of the info is shared (the nodes), part is copied (the header). Changing C1 changes the shared info in both, but the copied info in C2 is not modified accordingly and becomes out-of-date.