Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
for(inti:0;i<sizeof(myData);++i)
printf("%02X",*(cp+i));
putchar('\n');
Tenprzykładwygenerujenastępującywynik:
//Wypisujekażdybajt
//strukturywpostaci
//szesnastkowej.
0xbffffd70:2301000000000000CDCCCCCCCC6C5340
Dwapierwszebajtywyniku,czyli
2301
,świadcząotym,żekodzostałuruchomiony
wsystemieokolejnościbajtówwformielittle-endian.Otóżbajtonajniższymadresie
wstrukturzemyDatabyłostatnimbajtemznaczącymczłonkastrukturyidtypushort.
Wskaźnikidofunkcji
Typfunkcjizawszezawierazwracanyprzezniątypimożetakżezawieraćtypyparametrów.
Wskaźnikdodanejfunkcjimożnazawszejawnieprzekształcićwewskaźnikdofunkcji
innegotypu.Wponiższymprzykładzie,instrukcja
typedef
definiujenazwętypunfunkcji
przyjmującejjedenparametrtypudoubleizwracającejwartośćtypudouble”:
#include<math.h>
//Deklarujesqrt()ipow().
typedefdouble(func-t)(double);//Definiujetyponazwiefunc_t.
func-t*pFunc:sqrt;
//Wskaźnikdofunc_t,
//zainicjalizowanyadresemsqrt().
doubley:pFunc(2.0);
//Prawidłowewywołaniefunkcjiz
//wykorzystaniemwskaźnika.
printf("Pierwiastekkwadratowyz2wynosi%f.\n",y);
pFunc:(func-t*)pow;
/*y:pFunc(2.0);*/
//Zmianawartościwskaźnikanaadres
//funkcjipow().
//Niepróbujtego:pow()przyjmuje
//dwaargumenty.
Wtymprzykładziedowskaźnikadofunkcji
pFunc
sąprzypisywaneadresyfunkcjiinnego
typu.Jednakże,jeśliprogramużywawskaźnikadowywołaniafunkcji,którejdefinicja
niepasujedokładniedotypuwskaźnikafunkcji,wówczaszachowanieprogramubędzie
nieokreślone.
Niejawneprzekształceniawskaźników
Kompilatorniejawnieprzekształcapewnetypywskaźników.Przypisanie,wyrażenia
warunkowewykorzystująceoperatoryrówności
::
i
!:
orazwywołaniafunkcjiwiążą
sięzniejawnymprzekształceniemwskaźnikawtrzechprzypadkach,opisanychponiżej
wosobnychpunktach.Tetrzyprzypadkiniejawnegoprzekształcaniawskaźnikato:
66
|
Rozdział4:Przekształceniatypów