- Fixed-size, (generally known) at compile time - `int hello[5] = {1, 2, 3, 4, 5}` - What happens if you access `hello[6]`? - What happens if you access `hello[5]`? - What happens if we try to set those? - (better) `int hello[] = {1, 2, 3, 4, 5}` - What is their size - How do array indexes (TRULY THEY ARE OFFSETS) work - Why do they start 0? - `hello[3] -> (hello + 3)` - Then C does kind of magic with pointer arithmetic to know that 3 is multiplied by the sizeof the type - Array is "just" a pointer to N elements (where C doesn't keep track of how many things are in N) X is Y "an array is a pointer" Y is X "a pointer is an array" TODO: Look for some great definitions of these words from the interwebs that we can learn from. Or more like static arrays are like their own unique types. Like int[1] and int[2] are different types so it's not that C knows how big the arrays is. It just knows that int[2] is (sizeof(int) * 2) bytes big