Kezdőoldal » Számítástechnika » Programozás » Hogyan működnek a char típusú...

Hogyan működnek a char típusú mutatók és tömbök? C++. Többi lent.

Figyelt kérdés

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.


2012. okt. 31. 07:48
 1/5 iostream ***** válasza:

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.

2012. okt. 31. 09:53
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

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.

2012. okt. 31. 23:10
 3/5 iostream ***** válasza:
Igen, a char*-ra túl van terhelve, char**-ra nem, tehát az megy a void* kategóriába.
2012. okt. 31. 23:11
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:

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.

2012. nov. 1. 22:32
 5/5 iostream ***** válasza:

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).

2012. nov. 1. 23:09
Hasznos számodra ez a válasz?

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!