Q: What is the difference between a named initializer and a compound literal? A: A named initializer is used on the line where the variable was declared. (Assigning to a variable for the first time is called "initializing" the variable.) struct Node temp_node = { .value = 5, .next = NULL }; A compound literal can be used in any assignment (rhs) or to pass a parameter. It gives you the same kind of flexibility you have with string literals (e.g., "abc") and numeric literals (e.g., 3, 3.1415), but with compound types, such as structs and arrays. temp_node = (struct Node) { .value = 5, .next = NULL }; It looks just like a named initializer, but with something resembling a cast ('(struct Node)') in front of it.