Ez, miért van? [C++]
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.
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.)
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!