Ú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!
- VR topik (Oculus Rift, stb.)
- Győr és környéke adok-veszek-beszélgetek
- A nagy Szóda, Szódakészítés topic - legyen egy kis fröccs is! :-)
- Futás, futópályák
- RETRO beárazás (mobil, PC, konzol)
- exHWSW - Értünk mindenhez IS
- eMAG vélemények - tapasztalatok
- Alaplap javítása
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Sorozatok
- További aktív témák...
- LG 29WL500-B ultraWide gamer monitor leárazás!!! AkciÓÓ!
- Dell Latitude 5420 14" FHD IPS i7-1185G7 16GB 512GB NVMe gar
- LOQ 15ARP9 15.6" FHD IPS Ryzen 7 7435HS RTX 4050 16GB 512GB NVMe magyar vbill gar
- Apple MacBook Air 13.6" M2, 16GB/256GB (MC7X4MG/A ) Éjfekete - 100% akku - Garancia
- Gigabyte GeForce 760 4 GB -os VGA kártya ! aKCIóó!
- MacBook Air 9,1 i3-1000NG4 8GB 256GB
- HIBÁTLAN iPhone 13 mini 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3320, 100% Akksi
- Clevo 1060 6GB Mxm 3.1 laptop videó kártya ingyen házhoz szálitással
- BESZÁMÍTÁS! MSI B450M R5 5600X 32GB DDR4 1TB SSD RTX 4070 12GB Rampage SHIVA Cooler Master 750W
- HPE Aruba switch, 48G PoE+, 4SFP+, L3, Smart managed
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest
"
