C-ben egy pointer nem hordozza azt az információt, hogy az egy változóra mutat, vagy egy tömb első elemére?
Figyelt kérdés
2020. jan. 28. 21:24
1/9 anonim válasza:
Ha jól értem, csak rámutat az adott memóriaterületre, tehát adott memóriacímet tartalmaz, tehát nem.
2/9 anonim válasza:
A normál pointer c++ nyelvben sem tudja tárolni. Az csak egy memóriacím, ennyi fér bele a 32/64 bitbe.
4/9 anonim válasza:
Alapvetően nem hordozza, a memóriában mindkettő egy egyszerű pointerként jelenik meg, a fordító tudja, hogy pointer, vagy tömb, és annak megfelelően kezeli.
6/9 anonim válasza:
#4: a fordító sehogy nem kezeli, csak a programozó.
És nem, nem is szól róla warning formájában, mert sokszor ez az elvárt működés.
7/9 anonim válasza:
#6 Némiképp általánosan fogalmaztam azzal, hogy 'kezeli', de a fordító (értelemszerűen) megkülönbözteti a tömböket a mezei pointerektől. Ezért működik például a sizeof() függvény úgy, ahogy, mert fordítási időben tisztában van a fordító azzal, hogy pontosan mi van ott, és ezért nem tudsz például egy tömb típusú változónak pointert értékül adni. Bármennyire is hasonlít a kettő, a fordító igenis különbséget tesz közöttük, még ha minimálisan is.
8/9 anonim válasza:
A helyzet az, hogy a fordító is csak azt tartja számon, hogy mennyi memória lett lefoglalva a mutatott helyen. De hogy az pl. négy char elemű tömb vagy egy int, azt nem tudja.
A sizeof() is bájtban adja vissza a tömb méretét, ahogy bármilyen más típus méretét is.
9/9 anonim válasza:
Helyesbítek: Valóban tudja, hogy tömb-e, de nem a sizeof miatt.
char a[]={1,2,3,4};
char *p;
p=&a; // <- hibás !
A lényeg most a hibaüzenetben van:
warning: assignment to ‘char *’ from incompatible pointer type ‘char (*)[4]’
-> char (*)[4]
De ez csak az "eredeti" pointer szimbólumra (névre) igaz.
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
A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!