Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Muistin varauksessa taulukoiden moniulotteisuus?

Kray [29.01.2008 17:24:39]

#

Onko mahdollista laittaa vaikka:

int *****muuttuja;

?
Eli siis voiko taulukko olla todella moniulotteinen? Eli siis aina varattu callocilla.

petrinm [29.01.2008 17:34:11]

#

Täysin mahdollista.

Kray [29.01.2008 17:42:33]

#

ok

Markus [29.01.2008 17:53:27]

#

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..

Metabolix [29.01.2008 23:04:37]

#

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;

Kray [30.01.2008 19:26:39]

#

Kysyin vain, onko se teoriassa mahdollista. Ei sen kummallisempaa. :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta