Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
*/
intfloatcmp(constvoid*p1,constvoid*p2)
{
floatx:*(float*)p1,
y:*(float*)p2;
return(x<y)?-1:((x::y)?0:1);
}
/*
*Funkcjamain()sortujetablicętypufloat.
*/
intmain()
{
/*Dynamicznaalokacjamiejscadlatablicy:*/
float*pNumbers:malloc(ARR-LEN*sizeof(float));
/*...Obsługabłędów,inicjalizacjaelementówtablicy...*/
/*Sortowanietablicy:*/
qsort(pNumbers,ARR-LEN,sizeof(float),floatcmp);
/*...Korzystaniezposortowanejtablicy...*/
return0;
}
Wprzykładzie4-1funkcjamalloc()zwracavoid*,któryjestniejawnieprzekształcany
we
float*
podczasprzypisaniado
pNumbers
.Pierwszyargumentwwywołaniufunkcji
qsort()
,czyli
pNumbers
,jestniejawnieprzekształcanyztypu
float*
dotypu
void*
,ana-
zwafunkcjifloatcmpjestniejawnieinterpretowanajakowskaźnikdofunkcji.Nakońcu,
funkcjaqsort()wywołujefunkcjęfloatcmp(),przekazującdoniejargumentytypuvoid
*
,czylinuniwersalnego”typuwskaźnikowego.Argumentytesąnastępniejawnieprze-
kształcanedotypufloat*,przedichdereferencjąwceluinicjalizacjizmiennychfloat.
Wskaźnikidotypówobiektówzkwalifikatorami
WjęzykuCdostępnesąnastępującekwalifikatorytypu:
const
,
volatile
i
restrict
(wię-
cejinformacjinatemattychkwalifikatorówmożnaznaleźćwrozdziale11.).Naprzy-
kład,jeślitokonieczne,kompilatorniejawnieprzekształcadowolnywskaźnikdotypu
int
wewskaźniktypu
constint
.Jeśliniechcemydodawaćkwalifikatora,aleraczejgousunąć,
musimyskorzystaćzjawnegoprzekształcaniatypu,jakwponiższymprzykładzie:
intn:77;
constint*ciPtr:0;//Wskaźnikdoconstint.
//Samwskaźnikniejeststałą!
ciPtr:&n;
68
|
//Niejawnieprzekształcaadresdotypu
//constint*.
Rozdział4:Przekształceniatypów