Defining a type for a struct is the first surprise, but if you have followed how the array works so well with reference semantics, you might be even more surprised to learn that structs use value ...
Using value semantics for structs makes reasonable sense if the struct is small and uses only a small amount of memory. The reason arrays use reference semantics and structs use value semantics is ...