A: |
In general, making variable-size arrays in C is extremely easy for
one-dimensional arrays. Instead of
int a[n]; // where n is not known in compile-time
you can write:
int *a;
...
a = calloc (n, sizeof (int));
The same is not-so-easy for 2-dimensional arrays (see the previous question), and quite hard
(although possible) for n-dimensional arrays where n>2. To do this, you need to have nasty
plays with pointers. It is even possible to make a function named multi_dim which
creates multidimensional variable-sized arrays. I once created such routine for some
internal purposes (note that it is very tricky). Principally, its usage is like this:
if you want to simulate
int a[n1][n2][n3][n4];
where n1, n2, n3 and n4 are not known apriori, you need to do:
int ****a; // yes, quadruple pointer!!!
...
a = multi_dim (4, sizeof (int), n1, n2, n3, n4);
However, TIGCC is GNU C, and it has some extensions in addition to
"standard" C. For example, it allows variable-size arrays without any tricky
plays with pointers!!! (Note that this particular extension, together with a few others,
has been added to standard ISO C in 1999, so it is no longer non-standard.) Try this:
void _main(void)
{
int m, n, p;
m = random (5);
n = random (5);
p = random (5);
{
int a[m][n][p];
// do something with a
}
}
and you will see that it works!
|