Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Dowolnytypwskaźnikadoobiektumożnaniejawnieprzekształcićwewskaźnik
dovoidiodwrotnie.
Dowolnywskaźnikdodanegotypumożnaniejawnieprzekształcićwewskaźnik
dotegosamegotypu,leczoznaczonegowiększąliczbąkwalifikatorówtypu.
Staławskaźnikapustegomożebyćniejawnieprzekształconawdowolnytyp
wskaźnika.
Wskaźnikidotypuvoid
Wskaźnikidotypuvoid-czyliwskaźnikitypuvoid*-wykorzystywanejakowskaź-
nikinróżnorodnegoprzeznaczenia”
,reprezentująceadresdowolnegoobiektu,niezależnie
odjegotypu.Wskaźnikdotypuvoidzwracanaprzykładfunkcjamalloc()(patrzprzy-
kład2-3).Przeduzyskaniemdostępudoblokupamięciwskaźnikdotypuvoidmusibyć
zawszeprzekształconywewskaźnikdoobiektu.
Przykład4-1demonstrujewięcejprzypadkówużyciawskaźnikówdotypuvoid.
Programsortujetablicęzapomocąfunkcjistandardowejqsort(),zadeklarowanejwpli-
kunagłówkowymstdlib.h.Jejprototypjestnastępujący:
voidqsort(void*array,size-tn,size-telement-size,
int(*compare)(constvoid*,constvoid*));
Funkcja
qsort()
sortujetablicęzwykorzystaniemalgorytmuquick-sortwporządkuros-
nącym,począwszyodadresuarray.Zakładasię,żetablicamanelementóworozmiarze
element_size.
Czwartyparametr,czyli
compare
,jestwskaźnikiemdofunkcji,wywoływanejprzez
qsort()
wceluporównaniadwóchelementówtablicy.Adresytychdwóchporówny-
wanychelementówprzekazywanedofunkcjijakoparametrywskaźnikowe.Zwykle
funkcjadokonującaporównaniamusibyćzdefiniowanaprzezprogramistę.Musiona
zwracaćwartość,którajestmniejsza,równalubwiększaod0,informującwtensposób,
czypierwszyelementjestmniejszy,równy,czywiększyoddrugiego.
Przykład4-1Funkcjaporównującaprzeznaczonadlaqsort()
#include<stdlib.h>
#defineARR-LEN20
/*
*Funkcjasłużącadoporównańdowolnychdwóchelementówtypufloat,
*dowykorzystaniajakowywołaniezwrotnewfunkcjiqsort().
*Argumentysąprzekazywanezapomocąwskaźnika.
*
*Zwraca:-1jeślipierwszyelementjestmniejszyniżdrugi;
*
0jeślielementysąrówne;
*
1jeślipierwszyelementjestwiększyniżdrugi.
Przekształceniatypów
Przekształceniatypówniearytmetycznych
|
67