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

"pojasnjenj code sa pointerima"

[es] :: C/C++ programiranje :: C/C++ za početnike :: "pojasnjenj code sa pointerima"

[ Pregleda: 1208 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sammo

Član broj: 127354
Poruke: 64
78.104.132.*



Profil

icon "pojasnjenj code sa pointerima"02.12.2010. u 15:49 - pre 163 meseci
dal mi jos neko moze ovaj code da objasni.
Code:

#nclude<iostream>
using namespace std;
int main(){

int i = 3;    //definisano i inicijalizirano i 
double d = 1.5; //definisano i inicijalizirano d
int *ip = &i;    //pointer ip pokazuje na adresu i
double *dp = &d;    //pointer dp pokazuje na adresu d
 *ip = *ip + *dp;  // //pointer ip pokazuje na *ip + *dp=4 , i dobiva vrijednost 4
ip = (int *)dp;      //sta se desava ovdje?
cout << *ip;  //kako to da je rezultat 0
system ("pause");
return 0;
}
rezultat je 0
 
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: "pojasnjenj code sa pointerima"02.12.2010. u 16:57 - pre 163 meseci
Ovo ti je u suštini nedefinisano ponašanje. Da računar nije PC nego nekakva Motorola onda bi tu možda stajalo nešto drugo. Konkretno objašnjenje zašto je kod tebe nula je sledeće. Double 1.5 je u memoriji predstavljen sa 8 bajtova: 00 00 00 00 00 00 F8 3F. Prva četiri bajta su sve nule. Ako neki pointer na int pokazuje na te četiri nule onda će se ta "kućica" interpretirati kao nula. Ako bi recimo napisao double d = 7.2911289729122037e-304; onda bi se ispisivalo -1 jer je ovaj double u memoriji predstavljen sa FF FF FF FF 00 00 00 01, a FF FF FF FF je -1 kad se interpretira kao int.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: "pojasnjenj code sa pointerima"

[ Pregleda: 1208 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

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