I already am familiar with pointers. You can add an integer to pointers, subtract an integer from pointers, subtract pointers, and compare them.
Can we think of arrays as linear maps that map indexes to values? Obviously the indexes are not a vector space since they are subsets of the integers, but can we do some fuckery to change that? Would be fun to think about.
Multidimensional arrays are interesting because you have to map indexes into contiguous places in memory. This is similar to tile maps in games, which again goes to show why game development is so useful(the concepts used in game development are similar to the concepts required for computer architecture). Tick rates are similar to system clocks, and you’re synchronizing different actions in games to a tick rate too.
Again, most of this stuff I know and is also covered in practice in assembly books. One important thing to note is that it’s useful to align members of structs/records on desirable byte boundaries instead of packing them in one after the other. Also compilers will try to make sure that your structs have a length that aligns nicely.
Unions are similar to structs but hold only one field that can be of many types.
Unions are useful in the real world as aliases or mutually exclusive values etc.