Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Otoprzykład:
floatf-var:1.5F;
long*l-ptr:(long*)&f-var;
//Inicjalizacjawskaźnikado
//typulongzapomocąadresu
//zmiennejf_var.
double*d-ptr:(double*)l-ptr;//Inicjalizacjawskaźnikado
//typudoublezapomocątego
//samegoadresu.
//Wsystemie,wktórymsizeof(float)jestrównysizeof(long):
printf("%zubajtówreprezentujących%f,wkodzieszesnastkowym:0x%lX\n",
sizeof(f-var),f-var,*l-ptr);
//Użycieprzekształconegowskaźnikawprzypisaniumożenam
//przysporzyćkłopotów:
//Niepróbujtego!Wlokalizacjif_var
//niemamiejscanawartośćdouble!
*(float*)d-ptr:2.5;//OK:przechowujewtymmiejscu
//wartośćfloat.
/**d_ptr:2.5;*/
Jeślipoprzekształceniuwskaźnikdoobiektuniemawyrównaniawymaganegoprzez
nowytyp,wynikużyciawskaźnikajestnieokreślony.Wewszystkichpozostałychprzypad-
kachprzekształceniewartościwskaźnikazpowrotemdooryginalnegotypuwskaźnika
gwarantujezwrócenieodpowiednikaoryginalnegowskaźnika.Jeśliprzekształcimydowol-
nytypwskaźnikadoobiektuwewskaźnikdodowolnegotypuchar(char,signedchar,
lub
unsignedchar
),wynikiembędziewskaźnikdopierwszegobajtuobiektu.Pierwszy
bajtodnosisięwtymmiejscudobajtuonajniższymadresie,niezależnieodstruktury
porządkubajtówwsystemie.Poniższyprzykładwykorzystujetodowypisaniaszesnast-
kowejreprezentacjistruktury:
#include<stdio.h>
structData{
shortid;
doubleval;
};
structDatamyData:{0x123,77.7};//Inicjalizacjastruktury.
unsignedchar*cp:(unsignedchar*)&myData;//Wskaźnikdo
//pierwszego
//bajtustruktury.
printf("%p:",cp);
//Wypisujeadrespoczątkowy.
Przekształceniatypów
Przekształceniatypówniearytmetycznych
|
65