ie pobiera albo ni
inny wskaźnik. Więcej nawet. O ile normalnie nie wolno, bez rzutowania, kopiować do wskaźnika danego typu zawartości wskaźnika innego typu (patrz listing 70 - w drugiej linii funkcji głównej odbywa się takie rzutowanie), o tyle wskaźnik typu void jest jedynym elementem, dla którego jest to możliwe. Do wskaźnika typu void możemy wpisać zawartość innego typu wskaźnika bez konieczności rzutowania... oraz w drugą stronę - możemy zapisać go do dowolnego wskaźnika bez konieczności rzutowania.
Właściwość ta ułatwia czasami zapis tam, gdzie typ wskazywanego obiektu nie ma znaczenia. Zobaczmy na przykład deklaracje funkcji memepy, którą wstępnie poznaliśmy w ramce omawiającej struktury: 'memepy(void *, const void *, s. /.e t);
Gdyby nie specyficzne własności wskaźnika do typu pustego, jej wywołanie musiałoby przebiegać następująco:
memepy((void*)&sl , (void*)&^2, sizeof(si));
Zamiast tego jednak, piszemy znacznie krócej: memcpyC&si, sizeof(sl));
Ponadto, jak pokazał nam listing 68, wskaźnik typu void pozwala nam czasami pozbyć się niektórych wyrzucanych przez kompilator ostrzeżeń. Element ten jesi po prostu mniej pilnowany i kompilator musi założyć, żc stosując go, sami wiemy, co robimy.
Nic zniechęcaj się, jeśli czegoś nie zrozumiałeś. Wszystkie kody prezentowanych programów będą jak zwykle dostępne na stronach Elporta-lu. Sięgaj do nich śmiało, zmieniaj je, eksperymentuj. To chyba najlepszy sposób na zdobycie nowej wiedzy. Jeśli jeszcze tego nic zrobiłeś -postaraj się zdobyć kody źródłowe biblioteki stdio, zgodnie z opisem w tym odcinku.
Wskaźnik na typ pusty
Poznałeś już typ „zmiennej" o nazwie void. Powiedziałem Ci wtedy, że jest to specyficzny typ, który nie istnieje. Nie ma sensu tworzenie zmiennej typu void i taka próba zostanie zgłoszona przez kompilator jako btąd. Jedynym przeznaczeniem tego dziwnego tworu jest oznaczenie w pewnych miejscach, że żadnych zmiennych nie ma. Ze słowa kluczowego vold korzystaliśmy na razie przy tworzeniu funkcji. Funkcja że pobierać albo zwracać wartość typu pustego, co
void
Zupełnie inne znaczenie ma jednak wskaźnik na obiekt typu pustego. Utworzenie takiego wskaźnika jest jak najbardziej prawidłowym działaniem: void* pv;
Wskaźnik taki ma pewne szczególne własności. Przede wszystkim nie wolno na nim wykonywać jakichkolwiek działań, o jakich mowa była w przypadku wskaźników. Nie można go inkrementować czy dekrementować, dodawać do niego wartości, nie można odjąć od siebie dwóch wskaźników tego typu...
Teraz trochę o tym, co nam wolno. Wskaźnik typu void może być bez problemu zrzutowany na dowolny
W nadchodzącym odcinku zobaczymy zmiany, jakie nastąpiły w nowym WinAVR. Nowe środowisko jest już dostępne, jednak nie instaluj go jeszcze teraz, jeśli nie czujesz się w C pewnie. Niektóre z wprowadzonych zmian spowodują niestety, że część z napisanych przez nas programów nie będzie działać prawidłowo.
Część 9 będzie trochę spokojniejsza. Poznaliśmy dużo nowych elementów C i teraz będziemy zajmować się przykładami ich zastosowania.
Radosław Koppel
Wstąp do Klubu AVT
W Elektronik (gitarzysta fadio
MAGAZYN ELEKTRONIKI PROFESJONALNEJ ..........
Dóffl BtgSSBP ®’lS!Bter
ESTI
Jeśli prenumerujesz n czasopism, możesz zamówić n-1 darmowych egzemplarzy (np. Prenumerator 2 tytułów może otrzymać za darmo 1 egzemplarz, zaś Prenumerator 6 tytułów ma prawo do 5 darmowych egzemplarzy).
Prezentacje aktualnie oferowanych numerów wszystkich czasopism znajdziesz na stronach
www.Klub.AVT.pl . Tam również możesz złożyć bezpłatne zamówienie.
Zaprenumeruj! Zajrzyj na str. 75 lub skontaktuj się z Działem Prenumeraty: tel 022 5689922, e-mail prenumerata@avt.pl
48 Marzec 2006 Elektronika dla Wszystkich