Kezdőoldal » Számítástechnika » Programozás » Tipuskonvertálás hogyan?

Tipuskonvertálás hogyan?

Figyelt kérdés

Tudom nem sokat mondó a kérdés de azt érdekelne engem hogy egy pointert tipusu változó értékét egy intiget számmá konvertálni?

Olyanra gondolok pl.:

int a = 5;

int* Pa = &a;


és ezt a Pa pointert int számmá konvertálni.

pl ha az "a" karakter értéke intiger tipusba mondjuk 2 akkor char tipusban a 2 az "a" karaktert jelöli.



2015. dec. 3. 19:06
 1/7 anonim ***** válasza:

*Pa


Viszont nem tudom, hogy jön ide a char, mag az "a" karakter.

2015. dec. 3. 19:12
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

Intiget, intiger? Integer.


Ez még nem típuskonverzió, csak a pointer által tárolt memóriacím alatt lévő értéket kérdezi le: *Pa.

A fogalmazási készséged hagy még kívánni valót, de megértettem azért, hogy mire gondolsz az 'a' karakterrel. Azt sem kell konvertálnod, egyszerűen: int i = 'a'. De ha nagyon ragaszkodsz a castoláshoz: int i = (int)'a'.

2015. dec. 3. 19:43
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
Illetve irhattad volna melyik nyelven gondolod.
2015. dec. 3. 19:49
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
Köszönöm a válaszokat és elnézést hogy nem irtam ki a nyelvet. Ez a nyelv a c lenne.
2015. dec. 3. 21:14
 5/7 anonim ***** válasza:

Memory management basics:


Ha csinálsz egy ilyet:

int i = 5;

Akkor létrejön egy memóriaterület, amit elnevezünk "i"-nek, és arra a memóriaterületre beírjuk, hogy 5.


A processzor a memóriát bájtonként címzi meg. A memória a 0. bájton kezdődik. Nem tudom, mennyire gondolkodtál el rajta, hogy miért kell 64 bites rendszer, ha 4 GB-nál több memóriát akarsz a gépbe pakolni, de ez most mellékes. Jogos, ha egy memóriaterületet lefoglaltál, akkor meg tudod kérdezni, hogy a memóriában hányadik bájtnál kezdődik a lefoglalt terület. Erre lesz jó az & unáris operátor, például:

&i


Ezzel megkaptad azt az információt, hogy az i változód a memóriában melyik bájton kezdődik. De nem érzed azt, hogy ez egy kicsit hiányos információ? Nem kellene tudnod, hogy mégis hány bájton fér el az adat? Nos, ezt a problémát neked kell megoldanod. Neked kell tudnod, hogy az adott memóriaterületen milyen típusú adat van.


int *cim = &i;


Ha változót deklarálsz, és a név *-gal kezdődik, azzal jelzed, hogy az az adat egy memóriacím. Azt, hogy milyen típusú adat található azon a memóriacímen, azzal határoztad meg, hogy milyen típusú változót hoztál létre. Így a "cim" változó egy olyan memóriacím, ahol egy int típusú adat kezdődik. A gép onnan fogja tudni, hogy hány bájtot kell végigolvasnia, hogy tudja, mi a típusa, és az hány bájton fér el.


Mi van akkor, hogyha adva van a memóriacím, és te az azon a címen kezdődő értéket akarod kiolvasni? Ezt úgy teheted meg, hogy:

*cim

Vagyis, ha adva van egy memóriacím, elé egy *-ot odabiggyesztve kapod meg az értéket, már ha tudjuk, hogy milyen típusú adatot tartunk ott. De most tudjuk, mivel cim-et int-nek deklaráltuk.


int i = 5;

int *cim = &i;

int ertek = *cim;


Még egy dolgot kell tisztáznunk, hogy mi van akkor, ha tudjuk a memóriacímet, de azt nem tudjuk, hogy ott mi van. Ekkor csinálhatsz olyat, hogy:

void *cim = &i;


A void típus jelzi, hogy azon a címen ismeretlen típusú adat van, és mivel típus híján nem tudjuk, meddig kell olvasni a memóriát, az ilyen típusú memóriacímeket cast-olás nélkül vagy néhány spéci memóriakezelő függvény kivételével semmire sem tudjuk használni.

2015. dec. 3. 21:53
Hasznos számodra ez a válasz?
 6/7 A kérdező kommentje:
az ötödik válaszoló rengetekget segített... köszönöm szépen!
2015. dec. 7. 20:54
 7/7 A kérdező kommentje:
*rengeteget
2015. dec. 7. 20:54

További 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!