Zupełnie naplątałeś...
Po pierwsze, nie przejdzie
*ple=99.1. Dlaczego? Bo
'ple' jest wskaźnikiem na unsigned int, więc kompilator nie będzie przypisywał ci wartości zmiennoprzecinkowych do typu całkowitego, więc otrzymujesz ekwiwalent przypisu
*ple=99;...
Po drugie, czy ty może dysponujesz debuggerem? Wypadałoby
sprawdzić co dzieje się z pamięcią przydzieloną na zmienną 'ulamek', gdy ty zapisujesz tam liczbę 99...
Po trzecie, co robi GUI_TEXT? Jeśteś w stanie podejrzeć pamięć zajmowaną przez tablicę 'txt'?
Widać, że się pogubiłeś, bo nie rozumiesz wskaźników, a tylko wskaźniki pozwolą ci na osiągnięcie tego, co jest potrzebne.
Czym są wskaźniki?
Połuż sobie na biurku dwa elementy obok siebie: śrubkę i skrawek papieru. Przestrzeń twojego biurka, to pamięć.
Efekt: na pustej przestrzeni biurka widzisz dwa oddzielne obiekty; czyli w pamięci widzisz dwie zmienne...
unsigned int a;
float ulamek;
Teraz weź palec wskazujący
i skieruj go na śrubkę.
W tym momencie twój palec wskazujący wskazuje na śrubkę, czyli twój palec jest wskaźnikiem na jedną z zmiennych.
Wyobraź sobie, że twój palec może wskazywać na dowolny obiekt w twoim pokoju, ale na co by nie wskazał, będzie widział tylko śrubki, tyle, że o różnych kształtach i kolorach. Twój monitor też jest śrubką...
I to jest wskaźnik na typ. Skoro twój palec
będzie zawsze wskazywać na śrubki, a ty go zmusisz, aby wskazywał na monitor, to palec zinterpretuje monitor jako śrubkę.
Rozumiesz już?
Teraz ten sam palec, który zawsze wskazuje na śrubki, skieruj na skrawek papieru.
ple=(unsigned int*)&ulamek;
Co zobaczy palec?
ŚRUBKĘ!, tyle, że trochę niekształtna i blada....
Teraz: Twoje 'ple' jest wskaźnikiem na unsigned int. Jak palec na śrubkę. Gdzie byś nie kazał temu wskaźnikowi pokazywać, on zawsze będzie wskazywał na unsigned int, niezależnie, gdzie będzie wskazywał. Zgadzasz się?
A teraz każ mu wskazywać w to samo miejsce, gdzie znajduje się zmienna 'ulamek' (tak jak palec wskazujący na śrubkę skierujesz na skrawek papieru).
ple=(unsigned int*)&ulamek;
Czyli wskaźnik na unsigned int pokazuje na pamięć, w której tak naprawdę jest float (czyli palec wskazujący na śrubkę tak naprawde wskazuje na papier...)
Więc ty poprzez wskaźnik 'ple' interpretujesz to, co jest pod adresem zajmowanym przez zmienną ulamek, jako unsigned int. (wskazujesz na papier narzucając sobie, że to jest śrubka).
Do pamięci nieulotnej możesz zapisać tylko śrubkę (czyli unsigned int). Papieru już nie (czyli float). Teraz wystarczy, że zinterpretujesz papier jako śrubkę (czyli zinterpretujesz float jako unsigned int), i zapiszesz go....
Przy odczycie występuje ten sam proces, tyle, że wstecz. Odczytujesz unsigned int (czyli śrubkę),i intepretujesz ją jako float...