Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Potrebno objašnjenje za upist u fajl (char*)(&obj)

[es] :: C/C++ programiranje :: C/C++ za početnike :: Potrebno objašnjenje za upist u fajl (char*)(&obj)

[ Pregleda: 2111 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Potrebno objašnjenje za upist u fajl (char*)(&obj)09.05.2013. u 21:49 - pre 132 meseci
Code:
struct info{
                   int broj;};

int main(){
               info obj;
               obj.broj=5;
ofstream upis("test007.txt");

upis.write((char*)(&obj),sizeof(obj));   // ova linija je pitanje
}

Mene zanima šta znači (char*)(&obj) i da li se (char*) naziva casting operator?
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
*.dynamic.isp.telekom.rs.



+18 Profil

icon Re: Potrebno objašnjenje za upist u fajl (char*)(&obj)10.05.2013. u 06:47 - pre 132 meseci
Da, to je cast operator...
Na taj način se konvertuje jedan tip podataka u drugi...
 
Odgovor na temu

azzpoz

Član broj: 300637
Poruke: 96



+1 Profil

icon Re: Potrebno objašnjenje za upist u fajl (char*)(&obj)10.05.2013. u 14:06 - pre 132 meseci
Zašto se koristi (char*) sa zvezdicom i ampersand (&obj)

float b=5;
Zašto je kod varijabli npr. int a = (int) b;
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: Potrebno objašnjenje za upist u fajl (char*)(&obj)11.05.2013. u 19:26 - pre 132 meseci
Prvo sto je ovde bitno je da write prihvata char* tako da ti moras da izvrsis castovanje u pozivajucoj funkciji inace ne mozes parametar da predas ako nisu istog tipa.

Klasa info i char* (a i char) nemaju nista zajednicko i ti ne mozes jednostavno da castujes:

Code:


info obj;
char a = (char)obj;



char je velicine 1 bajt a velicina info je odredjena zbirom velicina promenljiva u bajtovima koje sadrzi. U ovom slucaju, posto sadrzi int, to je (zavisi od sistema ali neka bude) 4 bajta. Cak i ako info sadrzi char umesto int, kompajler ti nece dozvoliti da napises gore spomenuti kod.

Ako probas:

Code:

int b = 3;
char* a = (char*)b;



Posto pointer UVEK sadrzi adresu, char* a = (char*)b ce konvertovati broj 3 (posto je to vrednost b) i sada ce a pokazivati na adresu u memoriji 0x00000003 koja verovatno nije validna.

Sada objasnjenje glavnog pitanja:

char* pData = (char*)(&obj);

Kada zelis da uzmes adresu objekta, tj. da napravis pointer koji ce sadrzati adresu objekta, pises:

info* pInfo = &obj;

tako da (&obj) implicitno pretvara obj u info*.

info* je velicine 4 bajta
char* je velicine 4 bajta

Kompajler ti nece dozvoliti da pises: char* pData = pInfo iako su iste velicine. Dobices poruku 'cannot convert from info* to char*'.
Ali ako onda castujes iz info* u char* eksplicitno to ce raditi.

char* pData = (char*)pInfo; // OK

A posto je pInfo = &obj; // --->

char* pData = (char*)(&obj);

---------

Malo objasnjenje write funkcije (malo je advanced):
Write funkcija radi samo sa bajtovima tako da ti mozes da predas bilo koji objekat tako sto predas pocetnu adresu te promenljive u memoriji i zadas koliko bajtova je velika promenljiva.
Uzimanje pointera na neki objekat je u stvari uzimanje pocetne adrese tog objekta (svaki objekat u memoriji je niz bajtova sa pocetnom adresom i velicinom) i kad znas pocetnu adresu i koliko je objekat veliki u bajtovima u mogucnosti si da ga napises kao seriju char-ova (bajtova) u fajl.










EOF
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Potrebno objašnjenje za upist u fajl (char*)(&obj)

[ Pregleda: 2111 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.