Key points
- Arrays decay to a pointer to their first element; a[i] is *(a + i).
- Static local variables keep their value between calls and are initialised once.
- C passes arguments by value; to change the caller's variable, pass its address.
- sizeof is evaluated at compile time (except for VLAs) and does not evaluate its operand.
- Pointer arithmetic scales by the size of the pointed-to type.