[elektro] többdimenziós struktúra c++

Palasik Sandor palasik at mail.datanet.hu
Mon Jun 3 21:05:05 CEST 2013


> C-s guruktól kérdezem, hogyan tudok egy kétdimenziós struktúrát
> átadni függvény paraméterében mutatón keresztül ?
> Most így próbálkoztam:
> void függvény (struct VALAMI **Be)
>
> majd rá hivatkozni -
>    Be[x][y].elem=5;
>
> De úgy tűnik valami nem jó... Hogyan kell ezt korrektül csinálni ?

A fordító csak egy pointert ad át, ami az első elemre mutat, de azt nem adja
át, hogy mekkorák a dimenziók. Egy dimenziós esetben ez nem gond, de több
dimenziósnál így nem működik. Fordítási időben el kell árulnod az összes
dimenziót, legfeljebb az elsőt hagyhatod el.

Tehát ha teszem azt struct VALAMI X[5][6] a tömb, akkor átadhatod egy olyan
függvénynek, aminek a paramétere (struct VALAMI y[5][6]) vagy (struct VALAMI
(*z)[6]). A zárójel fontos. A (*z)[6] az egy olyan pointer, ami hat elemű 
sorokból álló két dimenziós tömbre mutat, a *z[6] pedig egy hat pointerből 
álló tömbre.

Amit te írtál le, az egy tömb címét adja át, ami pointereket tartalmaz. Meg
lehet ezt is csinálni, hogy csinálsz egy pointertömböt, amiben az elemek az
eredeti tömb soraira mutatnak. Ennek az a hátránya, hogy több memóriát
használ és külön fel kell tölteni, de az előnye az, hogy nem kell
szorozgatni a sor méretével ahhoz, hogy kiszámolja a valódi indexet. A
legtöbb hardveren kettő hatványaival egyszerűbb szorozni, mint akármi
mással. Ráadásul, ha a sor mérete nem ismert előre, akkor vagy így működik a
dolog, vagy külön változóban át kell adni a sor méretét aztán zsonglőrködni
az indexekkel.

Palasik Sándor



More information about the Elektro mailing list