- John Carmack csalódott a DGX Sparkban
- HiFi műszaki szemmel - sztereó hangrendszerek
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- AMD Navi Radeon™ RX 9xxx sorozat
- Milyen videókártyát?
- Milyen széket vegyek?
- OLED monitor topic
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Gaming notebook topik
- Házimozi haladó szinten
Ú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!
- John Carmack csalódott a DGX Sparkban
- Hobby rádiós topik
- OTP Bank topic
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Kamionok, fuvarozás, logisztika topik
- HiFi műszaki szemmel - sztereó hangrendszerek
- Linux haladóknak
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Lakáshitel, lakásvásárlás
- Apple iPhone 17 Pro Max – fennsík
- További aktív témák...
- Apple Airpods Pro 2 megkímélt usb -c
- DELL LATITUDE 7275 2in1 12.5" IPS Win10 TABLET/NOTEBOOK 8G/256GB ÜZLETBŐl, GARANCIÁVAL
- LG Gram 16 i7-1165G7 / 16GB RAM / 512GB SSD / 2.5K kijelző
- Pénztárcabarát áron eladó Lenovo ThinkPad T14 Gen 2 /i5-1145G7/16 GB/256 SSD/FHD/IPS/Garancia
- Jó áron eladó Lenovo ThinkPad T14s Gen 3/i5-1240P/16 GB/256 SSD/FHD+/IPS/Garancia/
- Eladó Samsung Galaxy Note 20 Ultra 5G 12/256GB / 12 hó jótállás
- Asus ROG Zephyrus G15 - 15.6" 4K 120Hz - Ryzen 7 6800HS - 24GB - 512GB - RTX 3060 - 2 hó garancia -
- GYÖNYÖRŰ iPhone 13 128GB Starlight- 1 ÉV GARANCIA, Kártyafüggetlen,MS3435
- Samsung Galaxy S24 FE / 8/128GB / Kártyafüggetlen / 12Hó Garancia
- Asus Vivobook S 16 - 16" 3.2K OLED 120Hz - Ultra 5 125H - 16GB - 1TB - Win11 - MAGYAR -1 év garancia
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest

"

