Cast double do int.

0

Mam takie małe pytanie: Czy cast z double do float spowoduje, że pointer będzie wskazywał zły adres (tkzw. nie mieści się w obszarze int, double)?

np.

int* i = NULL;
double a = 3.14;
	
i = reinterpret_cast<int*>(&a);
a = 5;

cout<<*i; //Zamiast 5 widze 0, albo zamiast 3.14 widze miliniowe liczby
0

w ten sposób dobierasz się do binarnej reprezentacji double i interpretujesz ją jako int.
Poczytaj jak komputer przechowuje dane, poszukaj na wiki, np: ieee 754

0

Jak włączyć podgląd "pamięci" w moim programie, czyli pod jakims adresem jest jaki obiekt, co przechowuje itd.

0

każde przyzwoite IDE (jak Code::Blocks, Eclipse, Visual Studio, Qt Creator, .... ), ma opcję debugger-a, uruchamiania programu krok po kroku i możliwość podglądania zawartości zmiennych (lub całych fragmentów pamięci).

0

@trux nie bardzo rozumiem. Wystarczy że uruchomisz to pod debuggerem i będziesz mógł sobie takie rzeczy oglądać.

0

Już mam, jeszcze mam pytanko.

Jak są zbudowane wskaźniki? tkzw. jako value przechowują adres do, którego się odnoszą a gdy kompilator do tego adresu dochodzi to wykrywa, że to jest adres i przenosi się pod ten adres itd.?

0

Kompilator? Kompilator nie działa przecież w runtimie. Masz zmienną która przechowuje jakiś adres. W trakcie dereferencji tego adresu następuje po prostu załadowanie wartości która znajduje się pod tym adresem i tyle. Kompilator po prostu generuje taki kod asemblera. Kompilator absolutnie nic nie "wykrywa" tym bardziej nie w C/C++. Możesz wepchnąć do wskaźnika co chcesz i próbować się odwołać do takiej pamięci (skończy się zwykle błędem oczywiście, bo system operacyjny pilnuje żeby tak nie robić).

0

Dla komputera nie ma różnicy między int, double, char, int*. Dla procesora to jest jedynie sterta zer i jedynek.
Dopiero kod programu, ma w sobie wpisane założenia, tu zapisane jest coś co reprezentuje char, a tam coś co reprezentuje adres wskazujący na double.
To twój kod w C++ narzuca wynikowemu programowi taką a nie inną interpretację, danych. Dla procesora nie ma to najmniejszego znaczenia.

0
MarekR22 napisał(a)

Dla komputera nie ma różnicy między int, double, char, int*. Dla procesora to jest jedynie sterta zer i jedynek.
Dopiero kod programu, ma w sobie wpisane założenia, tu zapisane jest coś co reprezentuje char, a tam coś co reprezentuje adres wskazujący na double.
To twój kod w C++ narzuca wynikowemu programowi taką a nie inną interpretację, danych. Dla procesora nie ma to najmniejszego znaczenia.

To będzie czepialstwo, ale nie potrafię sobie tego odmówić: istnieją architektury, dla których typ wskaźnika ma znaczenie, bo np. mają różny rozmiar, o czym można przeczytać tutaj: http://c-faq.com/null/machexamp.html

Ale jak wspomniałem: czepialstwo, nie podejrzewam, żeby autor pytania uczył się na takim nietypowym systemie. :) Mimo to uważam to za fajną ciekawostkę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1