Hogyan működnek a char típusú mutatók és tömbök? C++. Többi lent.
int x ;
int *px = &x ;
cout << px //Ezzel ki iratom a x változó memóriacímét.
de hogyha a px egy char típus volna és az x is akkor én ugyan ezzel a sorral:
cout << px //nem a memóriacímet iratom ki az x nek hanem az x memóriacímén levő adatot.
Teljesen máshogy működik egy char mutató és karaktertömb
....
Teljesen máshogy működik egy int tömb mint char tömb.
Lássuk:
char x[] = "kalap" ;
int d[] = {0,0};
cout << d + 0 ; //Megkapom a tömb első elemének a címét.
cout << x + 0 ; //Itt viszont ki iratom a tömbben levő adatokat.
Hogy van ez az egész.
Nagyon egyszerű a dolog pedig. Nem a tömbökben van különbség, azok teljesen ugyanúgy működnek.
A standard könyvtár függvényeinek speciális a char[]/*. Például az ostream operator<< függvénye char*-ra és void*-ra is meg van írva. void*-ra kiírja a címet, char*-ra kiírja a karaktereket. Teljesen szimpla túlterhelés.
char str[] = "kkk" ;
Akkor ez a void?:
cout << &str //Ki írja az első elemének a címét?
Ez meg a char:
cout << str // ki írja a karaktereket?
Kérlek írj.
Mégsem értem.
Nem azért mert rosszul írtad hanem mert csak nem értem a magyarázatodat nem értem mert nem is úgy történik ahogy leírtad.
Amikor megcsinálták az iostream könyvtárat, emlékeztek, hogy C-ben a char*, char[] volt a string helyett, azzal reprezentálták a karakterláncokat. Tehát tudták, hogy ha char*-ot akar kiírni az illető, akkor valószínűleg egy karakterláncra mutatót ad át, és nem a címét akarja kiírni, hanem a tartalmát.
Tehát amikor megírták az operator<< túlterheléseket, nem csak ilyet írtak:
std::ostream& operator<<(std::ostream& out, void* ptr);
hanem ilyet is:
std::ostream& operator<<(std::ostream& out, char* ptr);
Azaz ha olyat írsz, hogy std::cout << new int; akkor a void*-os verzió hívódik meg, hiszen az int* szó nélkül konvertálódik void*-á. Ha viszont olyat, hogy std::cout << "asdasd", akkor a char*-os verzió, hiszen a char[] konvertálódik char*-á (a constokat most hagyjuk).
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!