Egy tömb az egy változó?
A (láncolt) listához, struktúrához, hash táblához, fához hasonló összetett adattípus:
amit felhasználhatsz változók deklarálásánál.
(javítsatok ki ha hülyeséget írok)
A változó maga az egy memória cím, ami a tárolt adatra mutat a memóriában.
Szóval a változó lehet kb minden, csak valamire mutasson. (most a C referenciákat hagyjuk :D )
A tömb meg valami olyasmi, ami megmondja, hogy miként, hogy foglald le a memóriát és mekkora méretben. A változó meg csak rámutat erre a területre.
De a fejemet nem teszem rá, én valahogy így értelmezem :D
C-ben nincsenek referenciák, csak mutatók vannak. Ne keverjük össze a kettőt, mert nem ugyanaz!
Azért nehéz a tömbökről általánosságban beszélni, mert a különféle programnyelvek, fordítók egész máshogy implementálják a tömböket.
Absztraktabb szintről nézve a tömb egy adatszerkezet. Konkrétabb megvalósítását tekintve egy típus, ha pedig kifejezetten a tömbváltozót vizsgáljuk, az pedig egy változó.
C-ben például a tömb egy fancy szintaktikai körítés a pointerek mögé. Nincs igazából különbség a pointer és a tömb között, csak a tömbhöz készítettek egy beépített szintaktikai támogatást, a könnyebb kezelhetőség végett.
De ott van mondjuk a vector osztály C++-ban, ami hasonló célt szolgál, mint a tömb, de egy teljesen másik adattípus (bár belsőleg tömböt használ az is). Illetve ott van az std::array, ami megintcsak egy hasonló célú, de másképp implementált adattípus.
Ha mondjuk Javát nézzük, ott van Array, meg van ArrayList. Mindkettő osztály, de az Array-hoz van beépített szintaktikai támogatás, az ArrayList-hez nincs. Viszont egyiknek sincs nagyjából semmi köze a C-stílusú tömbökhöz.
És akkor még ott van a Set, Map típus, és a List egyéb konkrét megvalósításai...
stefan88, rosszul értelmezed.
A változó nem egy memóriacím, hanem egy adat, amely futásidőben a memória valamelyik részén helyezkedik el. Ennek a memória résznek az elejére mutat egy memóriacím. Innen, ettől a címtől kezdődően lehet kiolvasni magát a változót.
wheels egészen jó meghatározásokat ad. Abban is igaza van, hogy programnyelve, és azon belül is, annak implementációja válogatja, hogy mi micsoda.
A, mondjuk char tipusokat tartalmazó, egy dimenziós tömb c-ben úgy néz ki, hogy adott memóriacímtől kezdődő tömbelemek szekvenciális egymásutánisága. Ha a tömb a 0x100h címen kezdődik, akkor a negyedik tömbelemet a 0x103h, az elsőt meg a 0x100h címről olvashatjuk ki. Ugyanez a műsor pascalban úgy néz ki, hogy a 0x100h címen a char tömb méretét találjuk, az első tömbelemet pedig a 0x101h, a negyediket meg a 0x104h címen érjük el. Szinezi a helyzetet, hogy a C csak nulla alsó indexhatárt képes elviselni, a pascal ennél megengedőbb, ott a programozó állíthatja be magának ezt az értéket.
Abban igazad van, hogy a változó azonosítója, azaz neve, jellemzően a compileres nyelvek esetében, a forráskód lefordítása után eltűnik és a futtatható binárisban már csak a névhez rendelt adat lesz meg, ami a memóriába betöltve tényleg egy memóriacímen válik elérhetővé, olvashatóvá és írhatóvá. Ugyanez már nem feltétlenül igaz az interpreteres nyelvekre, de ott is előfordulhat hasonló megvalósítás. Tömb meg már csak azért sem lehet kizárólag változó, mert lehet éppen konstans is.
Anno főiskolán úgy kezdődött a "változók" témának a bevezetése, hogy alapvetően két féle változó van: egyszerű, és összetett. Az egyszerű egyszerre csak egyetlen értéket tud tárolni, az összetett meg többet is. Utóbbira a tömböt és a rekordot hozta fel példának a docens úr, de nyilván van belőle több is.
Persze, lehet filozofálgatni, hogy most akkor annak tekintsük-e, vagy sem. Az informatika elméleti része nem egy egzakt tudomány. Sok olyan dolog van, ami "véleményes".
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!