C/C++: Kérdés a pointeraritmetikával kapcsolatban?
Tehát:
char *sp = "Lafenita";
(1) Ez létrehozza a program statikus memóriaterületén a Lafenita sztringet, pontosabban karaktertömböt, és az sp mutató az első karakterére mutat, ugye?
cout << ++*sp << endl;
(2) Az elsőbbségi szabályoknak megfelelően először az indirektségi hivatkozás kerül végrehajtásra, vagyis a kifejezésben szerepel az "L" karakterre mutató pointer. Ezután növeljük az értékét. A tankönyvemből tudom, hogy ez nem 1 bájttal való elmozdulást jelent, hanem a szomszédos elemre való mozgatást. De a szomszédos elem az nem a memóriaterületen szomszédos elem? Mert az elvileg az "a" betű lenne, ehelyett az ASCII táblán mozgunk mert az eredmény "M". És nem értem hogy miért?
cout << sp << endl;
(3) Kiírjuk az sp mutatót, de se indirektség semmi, és az egész sztring kiírásra kerül. Ez a cout kiírás sajátossága hogy a sztringre mutató pointer kiírásánál a teljes sztringet kiírja automatikusan, vagy én nem értem hogy az "sp" miért adja vissza a teljes sztringet.
Ebben a három kérdésre ha válaszolnátok az sokat segítene nekem. Köszönöm, üdv
Igen, a "" formátumú karakterláncok a statikus tárterületen jönnek létre. Az, hogy ez most a kódszegmens vagy más, durván platformfüggő dolog. A C++ csak annyit mond, hogy ez a statikus tárterület, annak is egy potenciálisan nem írható része. Az sp pedig egy C-s visszafele kompatibilitás miatt nem const char mutatóként is mutathat egy konstans karaktertömbre.
"asd" ekvivalens azzal, hogy {'a', 's', 'd', 0}.
Ami érdekesség, hogy ++*sp. A ++ precedenciája nagyobb, mint a *-é, ellenben a szintaktika szerint itt a ++ nem vonatkozik az sp-re, csak a *sp-re. Próbáld ki *sp++-ként.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!