[elektro] többdimenziós struktúra c++
SZIGETI Szabolcs
szigiszabolcs at gmail.com
Tue Jun 4 11:03:58 CEST 2013
Hali!
De tudsz. Csak neked kell bizonyos adatokat kezelned. A C-ben nem létezik
tömb. Az index operátor csak egy kényelmesebb írási módja a pointerekkel
való szorzásnak és összeadásnak. Már volt róla szó, de itt a példa:
int t[5];
mivel t önmagában az első (nulladik elem) címét jelenti, azaz ugyanaz mint
&t[0] ezért mondjuk t[3] írható úgy is, hogy *(t+3). Hiszen a 3. elem a
memóriában pont 3 int-nyi távolságra van a 0. elemtől. A fordító tudja,
hogy *t int méretű, tehát a 3-at magától beszorozza sizeof (int)-tel.
Viszont ha t[3] ugyanaz, mint *(t+3), akkor értelemszerűen ez ugyanaz, mint
*(3+t), hiszen az összeadás kommutatív. Viszont akkor az első lépést
fordítva alkalmazva, arra kell, hogy jussunk, hogy ez ugyanaz, mint 3[t].
Ami hülyén néz ki, de eddig minden C fordító megette, ami azt bizonyítja,
hogy valóban nincsenek tömbök, csak pointerek.
Ez viszont azt jelenti, hogy a fordító általában (ez alól van egy kis
kivétel, de nem befolyásolja a mostani kérdést) nem tud a tömb méretéről, ő
csak egy pointert kezel. Vagyis, ha tömböket akarsz átadni pl. függvénynek,
akkor külön kell arról gondoskodnod, hogy a méretet átadjad.
Ha két dimenziós tömbbel foglalkozol, az valójában egy egydimenziós tömb a
memóriában, sorfolytonosan tárolva. Ezért ha ezt adod át függvénynek, az
egyik dimenziót fixre kell venni, hogy a compiler ki tudja számolni, hogy
hol vannak a sorok. Jobban jársz ilyenkor, ha csinálsz egy tömböt, ami a
többi tömböt tárolja, mert akkor akármilyen méretet tudsz kezelni, nyilván
itt is neked kell a méreteket tárolni, és átadni.
Ha ez nem tetszik, akkor válassz olyan nyelvet, amiben valódi tömbök vannak
(tehát a compiler tárolja a méretét, és ellenőrzi a túlcímzést.)
Szabolcs
2013. június 3. 21:25 Balla Zoltán írta, <sdrlab at yandex.ru>:
> Tehát azt mondod..., hiába tudom egy tömb címét a memóriában, a tömb
> struktúráját...mégsem tudok
> generálni ezekből az adatokból egy számomra elfogadható logikai
> hozzáférés-rendszert ? Ezt valahogy
> nem akaródzik elhinni, hiszen a c pont a rugalmasságáról híres...
>
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list