Kezdőoldal » Számítástechnika » Programozás » Ez, miért van? [C++]

Ez, miért van? [C++]

Figyelt kérdés

Szóval ugyebár egy mutató egy memória címet tárol el.


Nem hozhatjuk így létre, vagyis nem adhatunk meg literalt, hiszen a címet tárolja:


int* ptr = 1;


De így már lehet:


int a = 1;

int* ptr = &a;


Tehát átadtuk a címet a ptr-nek. Ez eddig rendben van.


És most jön a kérdés lényege:


const char* message = "Hello";


Hogy lehet, hogy ez jó?


Hiszen itt is egy címet tárolunk. Hogy adhatunk literalt vagyis miért?


Ha a memóriát megnézzük és rákeresünk a &message-re akkor a "Hello" karakter tömb 0. elemére mutat ugyebár, ha kimásoljuk a címet és rákeresünk a memóriába akkor megtaláljuk a "Hellot"-t.


Szóval ha a mutatók címet tárolnak akkor hogy tárolja le a "Hello"-t hiszen a char* címet tárol.


2020. júl. 9. 13:09
 1/4 anonim ***** válasza:
26%
Ez egy kényelmi megoldás, hogy így is tudj karakter tömböt tárolni. Ansi C-ben még nem lehetett így megoldani, mindenféle mágiát kellett alkalmazni, hogy ezt elérd. Lényegében azt csinálja amit gondolod, hogy csinál; helyet foglal neki, és rámásolja a memóriacímekre a karaktereket
2020. júl. 9. 13:46
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:
Köszönöm.
2020. júl. 9. 14:09
 3/4 anonim ***** válasza:
100%
Amúgy a "Hello" az egy karakter tömb. És a nulladik elem memóriacímét adja át a mutatónak.
2020. júl. 10. 07:12
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:
100%

Nem értem a "C++" dolgot, ez tisztán C. (Ami persze szerepelhet C++ kódban is.)

A nyers C-ben nincs szó szerint string, a stringek karakter tömbök, olyanok, mint bármilyen tömb, '\0' utolsó elemmel. Olyan érték nincs, hogy "hello", ez nem olyan, mint az 1 int érték. Amikor azt látod, hogy pl. "hello" string literál, akkor az egy tömb (ami a kódból bekerül a memóriába), és a tömböt a kezdőcíme azonosít, vagyis a "hello" valójában egy cím, egy const char* pointer.

(Arra vigyázz, hogy a literállal inicializált const char* változót nem változtatjuk. Ha mégis kell, akkor dinamikusan készítünk egy másolatot róla.)

2020. júl. 10. 12:36
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!