[ sammo @ 02.12.2010. 15:49 ] @
| 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
|
[ Mihajlo Cvetanović @ 02.12.2010. 16:57 ] @
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.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.