Kezdőoldal » Számítástechnika » Programozás » C/C++: Kérdés a pointeraritmet...

C/C++: Kérdés a pointeraritmetikával kapcsolatban?

Figyelt kérdés

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


2013. jún. 27. 21:45
1 2
 11/13 anonim ***** válasza:
Szívesen. Egyébként a *-ot a dereferálás operátorának (is) szokták nevezni.
2013. jún. 28. 11:30
Hasznos számodra ez a válasz?
 12/13 iostream ***** válasza:

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.

2013. jún. 28. 12:32
Hasznos számodra ez a válasz?
 13/13 A kérdező kommentje:
Köszönöm a segítségeteket, üdv
2013. jún. 28. 20:54
1 2

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!