Hirdetés
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- droidic: Windows 11 önállóság nélküli világ: a kontroll új korszaka
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- Brogyi: CTEK akkumulátor töltő és másolatai
- Elektromos rásegítésű kerékpárok
- Luck Dragon: Asszociációs játék. :)
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- GoodSpeed: Pillangóhatás: F billentyű meghibásodása -új gamer számítógépasztal
- bambano: Bambanő háza tája
Ú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!
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- droidic: Windows 11 önállóság nélküli világ: a kontroll új korszaka
- VGA kibeszélő offtopik
- Kerékpárosok, bringások ide!
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Motoros topic
- Rövid előzetest kapott a The Outer Worlds 2
- Beköszöntött az űrinternet kora
- Linux kezdőknek
- AMD Navi Radeon™ RX 9xxx sorozat
- További aktív témák...
- Újszerű Acer Aspire A515 - 15.6"FHD IPS - i5-1335U - 16GB - 512GB SSD - Win11
- Nagyon kedvező áron!Eladó Synology DS923+ Alza Gari 2027.10.23-ig
- Karácsonyra ps4 / ps5 collectors edition és egyéb ritka játékok
- Kedvező Ár! MacBook Pro M1 Pro 14.2 Istyle gari 2026.07.27-ig
- Intel Core i9-9900K, Gigabyte Z390 AORUS Master, Noctua NH-D15
- Samsung Galaxy S25 Blueblack 120 Hz AMOLED, AI-kamera, erős teljesítmény 12/128 GB Új
- Nokia 5.3 64GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy S22 Ultra 512GB, Kártyafüggetlen, 1 Év Garanciával
- GYÖNYÖRŰ iPhone 13 128GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3431, 94% Akkumulátor
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: Promenade Publishing House Kft.
Város: Budapest
"
