A pointer is declared as `char* p`, and an array as `char[] p`.
A two dimensional array parameter is declared as:
void transpose(double[][] a);
Having to specify the dimensions as separate parameters is an unfortunate design choice:1. It's clumsy to have to carry the dimensions around as separate items, rather than as one item
2. If the wrong X or Y is supplied, you have a massive memory corruption problem