Hirdetés
- MasterDeeJay: Harc a DDR5 árak ellen
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- urandom0: Száműztem az AI-t az életemből
- Luck Dragon: Asszociációs játék. :)
- eBay-es kütyük kis pénzért
- Magga: PLEX: multimédia az egész lakásban
- bb0t: Ikea PAX gardrób és a pokol logisztikája
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
Új hozzászólás Aktív témák
-
jattila48
aktív tag
válasz
Teasüti
#4135
üzenetére
"De hisz a tömb is egy pointer.
"Nem, nem az! C-ben valóban hasonlóan kezelheted a tömböt és a pointert, de ettől még a tömb nem pointer. Sok félreértés és hiba forrása ez, ugyanakkor nagyon kényelmes is tud lenni. A pointer egy változó, ami történetesen memória címet tartalmaz. Mint minden változónak, neki is van címe, és megváltoztathatod az értékét (balérték). Ezzel szemben a tömb egy konstans memória cím (ahol a tönb kezdődik). Ezt a konstanst a fordító/linker/betöltő számolja ki, amit te nem változtathatsz meg, és a címét sem képezheted (hiszen nem is létezik a memóriában).
int tomb[10];
tomb=new int[10]; //Hiba! tombnek nem lehet erteket adni, hiszen az konstans
int **ppi=&tomb; //Hiba! tombnek nem kepezheto a cime, mert az nem valtozo
int *pi=new int[10]; //OK
int **ppi=π //OK valtozonak kepezheto a cime
pi=new int[10]; //OK valtozo erteke megvaltoztathatoAmikor tömb elemre hivatkozol (kiindexeled), a fordító ehhez a konstans címhez adja hozzá az indexet, és erről a címről veszi elő a tömb elemet (intelnél egyetlen utasítás pl. : mov eax, DWORD PTR[ebx+0x1000]; indirekt indexelt címzési mód, ahol 0x1000-nél kezdődik a tömb, ebx-ben pedig az elérni kívánt tömbelem indexe található). Tehát itt a kódba a fordító beleírja a tömb konstans kezdőcímét.
Ha new-val foglalsz helyet, akkor a lefoglalt memória kezdőcímét egy változó kapja értékül, ez a változó a pointer. Ha ezen a memória területen tömb szintaxissal hivatkozol egy elemre, akkor a fordítónak (intel esetén) ehhez legalább két utasításra lesz szüksége. Az elsővel regiszterbe tölti a változó (pointer) címéről a változó értékét (ez maga a new-val foglalt memória kezdőcíme lesz). Ha pl. a pointered címe eax-ben van, akkor mov eax,DWORD PTR[eax] utasítás ezt megoldja. Majd az elem elérése mov eax,DWORD PTR[eax+esi] utasítással történik, ahol az esi tartalmazza azi indexet. Látható, hogy ez jóval lassabb művelet, mint az "igazi" tömb kiindexelése.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- HiFi műszaki szemmel - sztereó hangrendszerek
- MasterDeeJay: Harc a DDR5 árak ellen
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- A popóalávaló: DXRacer Drifting gamer szék tesztje
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Milyen belső merevlemezt vegyek?
- One otthoni szolgáltatások (TV, internet, telefon)
- Battlefield 6
- OLED TV topic
- További aktív témák...
- i7 12700/ 32GB DDR4/ RTX3070Ti/ 1TB SSD alapú konfig/ garancia/ ingyen foxpost
- Thinkpad X1 Extreme Gen 5, 4K+ IPS érintő , i7-12700H ,RTX 3060 , 64GB DDR5, 2TB NVMe, Magyar gar
- iPhone 13 128GB gyári független gyönyörű állapotú IOS 18
- Kingston FURY 32GB (2x16GB) DDR4 3200MHz CL16 KIT Beast Black - 1 év bolti garival! -
- Új, felbontott Corsair 32GB (2x16GB) KIT DDR4 3200MHz CL16 Vengeance LPX - 1 év bolti garival! -
- Telefon felvásárlás!! iPhone 11/iPhone 11 Pro/iPhone 11 Pro Max
- Telefon felvásárlás!! Samsung Galaxy S25, Samsung Galaxy S25 Plus, Samsung Galaxy S25 Ultra
- Apple iPhone 16 Pro Max - Black Titanium - 256GB - Akku: 90% - Megkímélt állapot!
- iKing.Hu-Samsung Galaxy S25 Ultra Titanium Black 12/256 GB-karcmentes Garancia 2028. 08. 23-ig
- GYÖNYÖRŰ iPhone 12 mini 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3854,94% Akkumulátor
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: ATW Internet Kft.
Város: Budapest
"
