Onko mahdollista laittaa vaikka:
int *****muuttuja;
?
Eli siis voiko taulukko olla todella moniulotteinen? Eli siis aina varattu callocilla.
Täysin mahdollista.
ok
kray kirjoitti:
Eli siis voiko taulukko olla todella moniulotteinen? Eli siis aina varattu callocilla.
Täysin mahdollista, mutta väittäisin, että on kätevämpää varata yksiulotteinen taulukko ja käyttää sitä kaksiulotteisen tapaan.
int *taulu = varaa_muistia(rivejä*sarakkeita*sizeof(int)); taulu[rivi*sarakkeita+sarake] = arvo;
Vastaavasti kolmi ja suurempi ulotteisille taulukoille:
int *taulu = varaa_muistia(rivejä*sarakkeita*tasoja*sizeof(int)); taulu[taso*rivejä*sarakkeita+rivi*sarakkeita+saraka] = arvo;
jne..
Voisit vilkaista vinkit 1544 ja 1825, jotka käsittelevät aihetta C:n kannalta. Jos et kuitenkaan tarvitse kovin moniulotteista taulukkoa, kannattaa käyttää kertolaskutapaa. Seuraavassa pienet kirjaimet ovat muuttujia ja isot taulukon mittoja kyseisessä suunnassa:
#define POS_3D(X, Y, x, y, z) (x + X * (y + Y * (z))) /* Huomaa kaava, jolla uudet ulottuvuudet lisätään: z => z + Z * (w) */ int *t; const int X = 3, Y = 4, Z = 5; t = malloc(X * Y * Z * sizeof(*t)); t[POS_3D(X, Y, 2, 1, 3)] = 10;
Kysyin vain, onko se teoriassa mahdollista. Ei sen kummallisempaa. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.