I stumbled upon a really nice trick in [mathc]: struct vec3 { double v[3]; }; [mathc]: https://github.com/felselva/mathc Maybe it's an old trick, but it was new to me. When writing a math library in C, you often deal with vectors and matrices -- in other words, arrays of a fixed size. And it would be really nice if you were able to write code like that: struct vec3 foo = {.v = {1, 2, 3}}, bar; bar = vec3_normalized(foo); That function `vec3_normalized()` takes a vector as an argument, normalizes it, and returns a *new* vector. If you use plain arrays in C, you can't do that. You'd have to call `malloc()` and allocate some memory on the heap. Of course, you'd have to free this memory later on. And there you have it, the burden of memory management. But! C has this peculiar property that you can return a struct from a function. So ... by simply wrapping your fixed-sized arrays in a struct, you can create a new array in a function and return it. No `malloc()`, no `free()`. Neat.