Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00254 010488 11039099 na godz. na dobę w sumie
Język C. Wskaźniki. Vademecum profesjonalisty - książka
Język C. Wskaźniki. Vademecum profesjonalisty - książka
Autor: Liczba stron: 544
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-198-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> c - programowanie
Porównaj ceny (książka, ebook, audiobook).

Książka 'Język C. Wskaźniki. Vademecum profesjonalisty' przeznaczona jest dla zaawansowanych studentów i profesjonalistów, zapewniając obszerne źródło informacji dla tych, którzy potrzebują dogłębnego omówienia języka C. Dokładne wyjaśnienie podstaw oraz przegląd zaawansowanych funkcji pozwala programistom skorzystać z siły wskaźników w języku C. Dokładny opis idiomów programowych oraz gruntowna dyskusja zaawansowanych tematów powoduje, że książka jest nieocenionym podręcznikiem i informatorem dla studentów i zawodowych programistów.

O autorze:
Kenneth A. Reek jest profesorem informatyki w Rochester Institute of Technology i doświadczonym programistą, który pracował w wielu firmach jako konsultant. Książka ta powstała po dziewięciu latach prowadzenia seminariów z programowania w C. [więcej...\

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Jêzyk C. Wskaĥniki. Vademecum profesjonalisty Autor: Kenneth A. Reek T³umaczenie: Pawe³ Gonera ISBN: 83-7361-198-3 Tytu³ orygina³u: Pointers on C Format: B5, stron: 544 Przyk³ady na ftp: 55 kB Ksi¹¿ka „Jêzyk C. Wskaĥniki. Vademecum profesjonalisty” przeznaczona jest dla zaawansowanych studentów i profesjonalistów, zapewniaj¹c obszerne ĥród³o informacji dla tych, którzy potrzebuj¹ dog³êbnego omówienia jêzyka C. Dok³adne wyjaġnienie podstaw oraz przegl¹d zaawansowanych funkcji pozwala programistom skorzystaæ z si³y wskaĥników w jêzyku C. Dok³adny opis idiomów programowych oraz gruntowna dyskusja zaawansowanych tematów powoduje, ¿e ksi¹¿ka jest nieocenionym podrêcznikiem i informatorem dla studentów i zawodowych programistów. • Zawiera wszystko, co jest niezbêdne do dog³êbnego poznania jêzyka C • Dok³adnie opisuje wskaĥniki, ich sk³adniê, techniki efektywnego u¿ycia oraz czêsto stosowane idiomy programistyczne, w których wystêpuj¹ wskaĥniki • Porównuje ró¿ne metody implementacji czêsto stosowanych abstrakcyjnych typów danych • Zawiera wskazówki na temat efektywnoġci, przenoġnoġci i zagadnieñ in¿ynierii programowania, jak równie¿ ostrze¿enia o czêsto pope³nianych b³êdach • Oferuje prosty, konwersacyjny styl, jasno opisuj¹cy trudne tematy, zawiera wiele ilustracji i diagramów pomagaj¹cych z wizualizacji skomplikowanych zagadnieñ • Opisuje wszystkie funkcje z biblioteki standardowej C. O Autorze: Kenneth A. Reek jest Profesorem informatyki w Rochester Institute of Technology i doġwiadczonym programist¹, który pracowa³ w wielu firmach jako konsultant. Ksi¹¿ka ta powsta³a po dziewiêciu latach prowadzenia seminariów z programowania w C. Profesor Reek prowadzi³ zajêcia na podstawowym i ġrednim poziomie z systemów operacyjnych, telekomunikacji, sieci komputerowych, analizy algorytmów i systemów prze³¹czaj¹cych. 5RKUVTGħEK 4QFKCđ 4QFKCđ 2TGFOQYC   5[DMKUVCTV   .........19 1.1. Wstęp ...................................................O...................................................O............... 1.1.1. Odstępy i komentarze ...................................................O.........................................22 1.1.2. Dyrektywy preprocesora...................................................O.....................................23 1.1.3. Funkcja main ...................................................O...................................................O...24 1.1.4. Funkcja czytaj_zakresy_kolumn ...................................................O........................27 1.1.5. Funkcja przeksztalc ...................................................O............................................32 1.2. Inne możliwości...................................................O...................................................O..... ...35 ......35 1.3. Kompilacja...................................................O...................................................O.......... 1.4. Podsumowanie ...................................................O...................................................O........ ..35 1.5. Podsumowanie ostrzeżeń...................................................O.............................................36 1.6. Podsumowanie wskazówek ...................................................O.........................................36 .........37 1.7. Pytania ...................................................O...................................................O............. 1.8. Ćwiczenia...................................................O...................................................O........... .......37 2QFUVCYQYGRQLúEKC  ......39 2.1. Środowiska...................................................O...................................................O.......... 2.1.1. Translacja...................................................O...................................................O........ .39 2.1.2. Wykonanie...................................................O...................................................O.......41 2.2. Zasady leksykalne...................................................O...................................................O... ..42 2.2.1. Znaki...................................................O...................................................O............. ...42 2.2.2. Komentarze...................................................O...................................................O......44 2.2.3. Dowolna postać kodu źródłowego ...................................................O.....................44 2.2.4. Identyfikatory ...................................................O...................................................O..45 2.2.5. Postać programu ...................................................O.................................................45 2.3. Styl programowania...................................................O...................................................O..46 2.4. Podsumowanie ...................................................O...................................................O........ ..47 2.5. Podsumowanie ostrzeżeń...................................................O.............................................48 2.6. Podsumowanie wskazówek ...................................................O.........................................48 2.7. Pytania ...................................................O...................................................O............. 2.8. Ćwiczenia...................................................O...................................................O........... .........48 .......50 4QFKCđ CPG   3.1. Podstawowe typy danych...................................................O.............................................51 3.1.1. Rodzina liczb całkowitych...................................................O..................................51 3.1.2. Typy zmiennoprzecinkowe...................................................O.................................55 3.1.3. Wskaźniki ...................................................O...................................................O........56 3.2. Podstawowe deklaracje...................................................O................................................58 3.2.1. Inicjalizacja...................................................O...................................................O..... .59 3.2.2. Deklarowanie prostych tablic ...................................................O.............................59 6 Język C. Wskaźniki. Vademecum profesjonalisty 3.2.3. Deklaracja wskaźników...................................................O......................................60 3.2.4. Niejawne deklaracje ...................................................O...........................................61 3.3. Typedef ...................................................O...................................................O............. 3.4. Stałe ...................................................O...................................................O............... 3.5. Zasięg...................................................O...................................................O.............. ........61 ...........62 ..........63 3.5.1. Zasięg ograniczony do bloku...................................................O..............................64 3.5.2. Zasięg ograniczony do pliku...................................................O...............................65 3.5.3. Zasięg ograniczony do prototypu ...................................................O.......................65 3.5.4. Zasięg ograniczony do funkcji ...................................................O...........................65 3.6. Sposób konsolidacji ...................................................O...................................................O. .66 3.7. Klasa zapisu ...................................................O...................................................O........ ......67 3.7.1. Inicjalizacja...................................................O...................................................O..... .69 3.8. Słowo kluczowe static ...................................................O.................................................69 3.9. Przykład zasięgu, rodzaju łączenia i klas zapisu...................................................O............70 3.10. Podsumowanie ...................................................O...................................................O....... .72 3.11. Podsumowanie ostrzeżeń...................................................O...........................................72 3.12. Podsumowanie wskazówek ...................................................O.......................................73 3.13. Pytania ...................................................O...................................................O............ ........73 +PUVTWMELG  4.1. Instrukcja pusta ...................................................O...................................................O.... .....77 4.2. Instrukcja wyrażenia ...................................................O...................................................O.77 ....78 4.3. Instrukcja bloku ...................................................O...................................................O.... ........79 4.4. Instrukcja if ...................................................O...................................................O....... 4.5. Instrukcja while...................................................O...................................................O.... .....80 4.5.1. Instrukcje break i continue ...................................................O.................................80 4.5.2. Działanie pętli while...................................................O...........................................81 4.6. Instrukcja for...................................................O...................................................O...... .......82 4.6.1. Wykonanie pętli for ...................................................O............................................82 4.7. Instrukcja do ...................................................O...................................................O....... 4.8. Instrukcja switch ...................................................O...................................................O... ......83 ....84 4.8.1. Instrukcja break w switch ...................................................O...................................85 4.8.2. Wartości domyślne ...................................................O.............................................86 4.8.3. Wykonanie instrukcji switch ...................................................O..............................86 4QFKCđ .....87 4.9. Instrukcja goto ...................................................O...................................................O..... 4.10. Podsumowanie ...................................................O...................................................O....... .89 4.11. Podsumowanie ostrzeżeń...................................................O...........................................90 4.12. Podsumowanie wskazówek ...................................................O.......................................90 4.13. Pytania ...................................................O...................................................O............ 4.14. Ćwiczenia...................................................O...................................................O.......... ........90 ......92 4QFKCđ 1RGTCVQT[KY[TCľGPKC  .......95 5.1. Operatory ...................................................O...................................................O........... 5.1.1. Arytmetyka ...................................................O...................................................O......95 5.1.2. Przesunięcia ...................................................O...................................................O.....95 5.1.3. Operatory bitowe ...................................................O................................................97 5.1.4. Przypisania..................................O...................................................O........................98 5.1.5. Operatory jednoargumentowe ...................................................O..........................101 5.1.6. Operatory relacyjne ...................................................O..........................................103 5.1.7. Operatory logiczne ...................................................O...........................................104 5.1.8. Operator warunkowy ...................................................O........................................105 5.1.9. Operator przecinka ...................................................O...........................................105 5.1.10. Indeks, wywołanie funkcji i element struktury .................................................107 5.2. Wartości logiczne ...................................................O...................................................O...108 5.3. L-wartości i R-wartości ...................................................O.............................................109 Spis treści 7 5.4. Obliczanie wyrażeń...................................................O...................................................O.110 5.4.1. Niejawna konwersja typów ...................................................O..............................110 5.4.2. Konwersje arytmetyczne ...................................................O..................................111 5.4.3. Właściwości operatorów...................................................O...................................112 5.4.4. Priorytety i kolejność wykonywania ...................................................O................114 5.5. Podsumowanie ...................................................O...................................................O........116 5.6. Podsumowanie ostrzeżeń...................................................O...........................................118 5.7. Podsumowanie wskazówek ...................................................O.......................................118 5.8. Pytania ...................................................O...................................................O............. 5.9. Ćwiczenia...................................................O...................................................O........... .......118 .....121 4QFKCđ 9UMCļPKMK   ..123 6.1. Pamięć i adresy ...................................................O...................................................O..... 6.1.1. Adresy i zawartość...................................................O............................................124 6.2. Wartości i ich typy...................................................O...................................................O. .124 6.3. Zawartość zmiennej wskaźnikowej ...................................................O...........................126 6.4. Operator dereferencji ...................................................O.................................................126 6.5. Niezainicjowane i nieprawidłowe wskaźniki ...................................................O............128 6.6. Wskaźnik NULL...................................................O...................................................O.....129 6.7. Wskaźniki, dereferencja i L-wartości ...................................................O........................130 6.8. Wskaźniki, dereferencja i zmienne...................................................O............................131 6.9. Stałe wskaźnikowe...................................................O...................................................O..131 6.10. Wskaźniki do wskaźników ...................................................O......................................132 6.11. Operacje na wskaźnikach...................................................O.........................................133 6.12. Przykłady ...................................................O...................................................O.......... 6.13. Arytmetyka wskaźników ...................................................O.........................................141 6.13.1. Operacje arytmetyczne ...................................................O...................................142 6.13.2. Operacje relacyjne ...................................................O..........................................145 6.14. Podsumowanie ...................................................O...................................................O......146 6.15. Podsumowanie ostrzeżeń...................................................O.........................................147 6.16. Podsumowanie wskazówek ...................................................O.....................................147 ......148 6.17. Pytania ...................................................O...................................................O............ 6.18. Ćwiczenia...................................................O...................................................O.......... ....150 (WPMELG  7.1. Definicja funkcji ...................................................O...................................................O... ..153 ....138 7.1.1. Instrukcja return...................................................O................................................154 7.2. Deklaracje funkcji...................................................O...................................................O.. .155 7.2.1. Prototypy ...................................................O...................................................O.......155 7.2.2. Domyślne założenia dla funkcji ...................................................O.......................158 7.3. Argumenty funkcji...................................................O...................................................O..158 7.4. ATD i czarne skrzynki...................................................O...............................................162 7.5. Rekurencja ...................................................O...................................................O.......... ....164 7.5.1. Śledzenie funkcji rekurencyjnych ...................................................O....................166 7.5.2. Rekurencja a iteracja ...................................................O........................................169 7.6. Zmienna lista argumentów...................................................O.........................................172 7.6.1. Makra stdarg ...................................................O...................................................O..173 7.6.2. Ograniczenia zmiennej listy argumentów ...................................................O........174 7.7. Podsumowanie ...................................................O...................................................O........175 7.8. Podsumowanie ostrzeżeń...................................................O...........................................176 7.9. Podsumowanie wskazówek ...................................................O.......................................176 7.10. Pytania ...................................................O...................................................O............ 7.11. Ćwiczenia...................................................O...................................................O.......... ......177 ....178 4QFKCđ 8 Język C. Wskaźniki. Vademecum profesjonalisty 4QFKCđ 6CDNKEG  8.1. Tablice jednowymiarowe...................................................O...........................................179 8.1.1. Nazwy tablic ...................................................O...................................................O..179 8.1.2. Indeksy......................................O...................................................O........................180 8.1.3. Wskaźniki kontra indeksy ...................................................O................................183 8.1.4. Efektywność wskaźników ...................................................O................................184 8.1.5. Tablice i wskaźniki...................................................O...........................................190 8.1.6. Nazwy tablic i argumenty funkcji ...................................................O....................190 8.1.7. Deklarowanie parametrów tablicowych ...................................................O...........192 8.1.8. Inicjalizacja...................................................O...................................................O....192 8.1.9. Niekompletne inicjalizacje ...................................................O...............................193 8.1.10. Automatyczne określanie wielkości tablicy ...................................................O...194 8.1.11. Inicjalizacja tablicy znaków ...................................................O...........................194 8.2. Tablice wielowymiarowe...................................................O...........................................194 8.2.1. Kolejność zapisu...................................................O...............................................195 8.2.2. Nazwy tablic ...................................................O...................................................O..196 8.2.3. Indeksy......................................O...................................................O........................197 8.2.4. Wskaźniki na tablice...................................................O.........................................199 8.2.5. Tablice wielowymiarowe jako argumenty funkcji ..............................................200 8.2.6. Inicjalizacja...................................................O...................................................O....201 8.2.7. Automatyczne określanie wielkości tablic ...................................................O.......204 8.3. Tablice wskaźników ...................................................O..................................................204 8.4. Podsumowanie ...................................................O...................................................O........207 8.5. Podsumowanie ostrzeżeń...................................................O...........................................208 8.6. Podsumowanie wskazówek ...................................................O.......................................209 8.7. Pytania ...................................................O...................................................O............. 8.8. Ćwiczenia...................................................O...................................................O........... .......209 .....213 4QFKCđ KæIKPCMKKDCLV[   9.1. Ciągi znaków — podstawy ...................................................O........................................219 9.2. Długość ciągu ...................................................O...................................................O....... 9.3. Nieograniczone funkcje operujące na ciągach...................................................O.............221 9.3.1. Kopiowanie ciągów ...................................................O..........................................221 9.3.2. Łączenie ciągów ...................................................O...............................................222 9.3.3. Wartość zwracana przez funkcję ...................................................O......................222 9.3.4. Porównywanie ciągów...................................................O......................................223 ..219 9.4. Funkcje operujące na ciągach o ograniczonej długości ..................................................223 9.5. Proste wyszukiwanie w ciągach ...................................................O................................224 9.5.1. Wyszukiwanie znaków ...................................................O.....................................225 9.5.2. Wyszukiwanie dowolnego z kilku znaków ...................................................O......225 9.5.3. Wyszukiwanie podciągu...................................................O...................................225 9.6. Zaawansowane wyszukiwanie ciągów ...................................................O......................227 9.6.1. Wyszukiwanie przedrostków w ciągu ...................................................O..............227 9.6.2. Wyszukiwanie tokenów...................................................O....................................227 9.7. Komunikaty dotyczące błędów...................................................O..................................229 9.8. Operacje na znakach ...................................................O..................................................229 9.8.1. Klasyfikacja znaków...................................................O.........................................229 9.8.2. Transformacje znaków ...................................................O.....................................230 9.9. Operacje na pamięci...................................................O...................................................O230 9.10. Podsumowanie ...................................................O...................................................O......232 9.11. Podsumowanie ostrzeżeń...................................................O.........................................233 9.12. Podsumowanie wskazówek ...................................................O.....................................233 9.13. Pytania ...................................................O...................................................O............ 9.14. Ćwiczenia...................................................O...................................................O.......... ......234 ....234 Spis treści 9 4QFKCđ 5VTWMVWT[KWPKG   10.1. Podstawy struktur ...................................................O...................................................O.241 10.1.1. Deklaracje struktur ...................................................O.........................................242 10.1.2. Składniki struktury ...................................................O.........................................243 10.1.3. Bezpośredni dostęp do składników ...................................................O................244 10.1.4. Pośredni dostęp do składników ...................................................O......................244 10.1.5. Struktury odwołujące się do samych siebie...................................................O....245 10.1.6. Niekompletne deklaracje ...................................................O................................246 10.1.7. Inicjalizacja struktur ...................................................O.......................................246 10.2. Struktury, wskaźniki i składniki ...................................................O..............................247 10.2.1. Odwołanie poprzez wskaźnik...................................................O.........................248 10.2.2. Odwoływanie się do struktury...................................................O........................248 10.2.3. Odwoływanie się do składników struktury ...................................................O....249 10.2.4. Odwoływanie się do zagnieżdżonej struktury ...................................................O251 10.2.5. Odwoływanie się do składnika wskaźnikowego ...............................................251 10.3. Sposób zapisu struktur ...................................................O.............................................253 10.4. Struktury jako argumenty funkcji ...................................................O............................254 10.5. Pola bitowe ...................................................O...................................................O........ 10.6. Unie...................................................O...................................................O............... ...257 ........260 10.6.1. Rekordy z wariantami...................................................O.....................................261 10.6.2. Inicjalizacja unii ...................................................O.............................................262 10.7. Podsumowanie ...................................................O...................................................O......263 10.8. Podsumowanie ostrzeżeń...................................................O.........................................264 10.9. Podsumowanie wskazówek ...................................................O.....................................264 10.10. Pytania ...................................................O...................................................O........... 10.11. Ćwiczenia...................................................O...................................................O......... .....264 ...267 4QFKCđ [PCOKEPGRT[FKGNCPKGRCOKúEK   11.1. Dlaczego korzystamy z dynamicznego przydzielania pamięci ..................................271 11.2. Funkcje malloc i free ...................................................O...............................................271 11.3. Funkcje calloc i realloc ...................................................O............................................273 11.4. Wykorzystanie dynamicznie przydzielanej pamięci...................................................O273 11.5. Częste błędy pamięci dynamicznej...................................................O..........................274 11.5.1. Wycieki pamięci ...................................................O.............................................277 11.6. Przykłady przydzielania pamięci ...................................................O.............................277 11.7. Podsumowanie ...................................................O...................................................O......283 11.8. Podsumowanie ostrzeżeń...................................................O.........................................283 11.9. Podsumowanie wskazówek ...................................................O.....................................283 11.10. Pytania ...................................................O...................................................O........... 11.11. Ćwiczenia...................................................O...................................................O......... .....284 ...285 4QFKCđ 9[MQT[UVCPKGUVTWMVWTKYUMCļPKMÎY   ........287 12.1. Listy ...................................................O...................................................O.............. 12.2. Lista jednokierunkowa...................................................O.............................................287 12.2.1. Wstawianie węzłów do listy jednokierunkowej ................................................288 12.2.2. Inne operacje na listach ...................................................O..................................297 12.3. Lista dwukierunkowa...................................................O...............................................298 12.3.1. Wstawianie do listy dwukierunkowej...................................................O.............298 12.3.2. Inne operacje na listach ...................................................O..................................306 12.4. Podsumowanie ...................................................O...................................................O......307 12.5. Podsumowanie ostrzeżeń...................................................O.........................................307 12.6. Podsumowanie wskazówek ...................................................O.....................................308 12.7. Pytania ...................................................O...................................................O............ 12.8. Ćwiczenia...................................................O...................................................O.......... ......308 ....308 10 Język C. Wskaźniki. Vademecum profesjonalisty 4QFKCđ CCYCPUQYCPGCICFPKGPKCFQV[EæEGYUMCļPKMÎY  13.1. Więcej o wskaźnikach do wskaźników ...................................................O...................311 13.2. Deklaracje zaawansowane ...................................................O.......................................313 13.3. Wskaźniki do funkcji ...................................................O...............................................315 13.3.1. Funkcje wywołania zwrotnego...................................................O.......................316 13.3.2. Tablice skoków...................................................O...............................................319 13.4. Argumenty wiersza poleceń...................................................O.....................................321 13.4.1. Przekazywanie argumentów wiersza poleceń ...................................................O321 13.4.2. Przetwarzanie argumentów wiersza poleceń...................................................O..323 13.5. Literały ciągów znaków...................................................O...........................................326 13.6. Podsumowanie ...................................................O...................................................O......328 13.7. Podsumowanie ostrzeżeń...................................................O.........................................329 13.8. Podsumowanie wskazówek ...................................................O.....................................329 13.9. Pytania ...................................................O...................................................O............ 13.10. Ćwiczenia...................................................O...................................................O......... ......330 ...333 4QFKCđ 2TGRTQEGUQT   14.1. Symbole predefiniowane ...................................................O.........................................337 14.2. #define ...................................................O...................................................O............ ......337 14.2.1. Makra...................................................O...................................................O...........339 14.2.2. Podstawianie za pomocą #define...................................................O....................340 14.2.3. Makra kontra funkcje...................................................O......................................341 14.2.4. Argumenty makr z efektami ubocznymi ...................................................O........342 14.2.5. Konwencje nazewnictwa ...................................................O................................343 14.2.6. #undef ...................................................O...................................................O..........344 14.2.7. Definicje z wiersza poleceń...................................................O............................345 14.3. Kompilacja warunkowa ...................................................O...........................................345 14.3.1. #if defined...................................................O...................................................O....347 14.3.2. Dyrektywy zagnieżdżone ...................................................O...............................347 14.4. Dołączanie plików ...................................................O...................................................O348 14.4.1. Dołączanie biblioteczne...................................................O..................................349 14.4.2. Dołączanie lokalne ...................................................O.........................................349 14.4.3. Zagnieżdżone dołączanie plików...................................................O....................350 14.5. Inne dyrektywy ...................................................O...................................................O.....351 14.6. Podsumowanie ...................................................O...................................................O......352 14.7. Podsumowanie ostrzeżeń...................................................O.........................................353 14.8. Podsumowanie wskazówek ...................................................O.....................................354 14.9. Pytania ...................................................O...................................................O............ 14.10. Ćwiczenia...................................................O...................................................O......... ......354 ...356 4QFKCđ (WPMELGYGLħEKCY[LħEKC   15.1. Raportowanie błędów ...................................................O..............................................357 15.2. Przerywanie działania ...................................................O..............................................358 15.3. Standardowa biblioteka wejścia-wyjścia ...................................................O.................358 15.4. Założenia wejścia-wyjścia ANSI...................................................O.............................359 15.4.1 Strumienie...................................................O...................................................O.....359 15.4.2. Struktury FILE...................................................O................................................361 15.4.3. Standardowe stałe wejścia-wyjścia ...................................................O................361 15.5. Przegląd strumieniowego wejścia-wyjścia ...................................................O..............362 15.6. Otwieranie strumieni...................................................O................................................363 15.7. Zamykanie strumieni ...................................................O...............................................365 15.8. Znakowe wejście-wyjście ...................................................O........................................366 15.8.1. Makra znakowego wejścia-wyjścia ...................................................O................367 15.8.2. Wycofywanie operacji znakowego wejścia-wyjścia .........................................368 15.9. Niesformatowane wierszowe wejście-wyjście ...................................................O........369 Spis treści 11 15.10. Formatowane wierszowe wejście-wyjście...................................................O.............371 15.10.1. Rodzina scanf ...................................................O...............................................371 15.10.2. Kody formatujące funkcji scanf ...................................................O...................371 15.10.3. Rodzina printf ...................................................O...............................................376 15.10.4. Kody formatujące printf ...................................................O...............................376 15.11. Binarne wejście-wyjście ...................................................O........................................380 15.12. Funkcje wyszukujące i opróżniające bufory...................................................O..........381 15.13. Zmiana buforowania ...................................................O..............................................384 15.14. Funkcje obsługi błędów strumienia ...................................................O.......................385 15.15. Pliki tymczasowe ...................................................O...................................................O385 15.16. Funkcje do manipulacji plikami ...................................................O............................386 15.17. Podsumowanie ...................................................O...................................................O....386 15.18. Podsumowanie ostrzeżeń...................................................O.......................................388 15.19. Podsumowanie wskazówek ...................................................O...................................389 15.20. Pytania ...................................................O...................................................O........... 15.21. Ćwiczenia...................................................O...................................................O......... .....389 ...390 4QFKCđ $KDNKQVGMCUVCPFCTFQYC   16.1. Funkcje typu całkowitego...................................................O........................................395 16.1.1. Arytmetyka stdlib.h ...................................................O....................................395 16.1.2. Liczby losowe stdlib.h ...................................................O...............................396 16.1.3. Konwersja ciągów znaków stdlib.h ...................................................O...........397 16.2. Funkcje zmiennoprzecinkowe ...................................................O.................................398 16.2.1. Trygonometria math.h ...................................................O................................399 16.2.2. Funkcje hiperboliczne math.h ...................................................O....................399 16.2.3. Funkcje logarytmiczne i wykładnicze math.h ...............................................399 16.2.4. Reprezentacja zmiennoprzecinkowa math.h .................................................400 16.2.5. Potęgowanie math.h ...................................................O...................................400 16.2.6. Podłoga, sufit, wartość bezwzględna i reszta math.h ....................................400 16.2.7. Konwersja ciągów znaków stdlib.h ...................................................O...........401 16.3. Funkcje daty i czasu...................................................O.................................................401 16.3.1. Czas procesora time.h ...................................................O................................401 16.3.2. Data i godzina time.h ...................................................O.................................402 16.4. Skoki nielokalne setjmp.h ...................................................O...................................405 16.4.1. Przykład ...................................................O...................................................O.......406 16.4.2. Kiedy używać nielokalnych skoków ...................................................O..............408 16.5. Sygnały ...................................................O...................................................O............ .....408 16.5.1. Nazwy sygnałów signal.h ...................................................O..........................408 16.5.2. Przetwarzanie sygnałów signal.h ...................................................O...............410 16.5.3. Obsługa sygnałów...................................................O...........................................411 16.6. Drukowanie list zmiennych argumentów stdarg.h .................................................413 16.7. Środowisko wykonania...................................................O............................................413 16.7.1. Przerwanie działania stdlib.h ...................................................O.....................413 16.7.2. Asercje assert.h ...................................................O..........................................414 16.7.3. Środowisko stdlib.h ...................................................O....................................415 16.7.4. Wykonywanie poleceń systemowych stdlib.h ..............................................415 16.8. Sortowanie i wyszukiwanie stdlib.h ...................................................O....................415 16.9. Ustawienia międzynarodowe...................................................O...................................418 16.9.1. Formatowanie numeryczne i monetarne locale.h .........................................419 16.9.2. Ciągi znaków i ustawienia regionalne string.h .............................................421 16.9.3. Efekty zmiany ustawień regionalnych...................................................O............422 16.10. Podsumowanie ...................................................O...................................................O....422 16.11. Podsumowanie ostrzeżeń...................................................O.......................................424 16.12. Podsumowanie wskazówek ...................................................O...................................424 16.13. Pytania ...................................................O...................................................O........... 16.14. Ćwiczenia...................................................O...................................................O......... .....425 ...426 12 Język C. Wskaźniki. Vademecum profesjonalisty 4QFKCđ -NCU[EPGRT[MđCF[CDUVTCME[LP[EJV[RÎYFCP[EJ  17.1. Przydział pamięci...................................................O...................................................O..429 17.2. Stosy...................................................O...................................................O.............. ........430 17.2.1. Interfejs stosu...................................................O..................................................430 17.2.2. Implementacja stosu ...................................................O.......................................430 17.3. Kolejki ...................................................O...................................................O............ ......438 17.3.1. Interfejs kolejki...................................................O...............................................439 17.3.2. Implementacja kolejki ...................................................O....................................440 17.4. Drzewa ...................................................O...................................................O............. .....444 17.4.1. Wstawianie wartości do uporządkowanego drzewa binarnego............................445 17.4.2. Usuwanie wartości z uporządkowanego drzewa binarnego ..............................445 17.4.3. Wyszukiwanie wartości w uporządkowanym drzewie binarnym ........................446 17.4.4. Przeglądanie drzewa ...................................................O.......................................446 17.4.5. Interfejs uporządkowanego drzewa binarnego ..................................................448 17.4.6. Implementacja uporządkowanego drzewa binarnego........................................448 17.5. Usprawnienia implementacji ...................................................O...................................455 17.5.1. Utworzenie więcej niż jednego stosu ...................................................O.............455 17.5.2. Wykorzystywanie więcej niż jednego typu ...................................................O....456 17.5.3. Konflikty nazw ...................................................O...............................................457 17.5.4. Standardowe biblioteki ATD...................................................O..........................457 17.6. Podsumowanie ...................................................O...................................................O......460 17.7. Podsumowanie ostrzeżeń...................................................O.........................................461 17.8. Podsumowanie wskazówek ...................................................O.....................................461 17.9. Pytania ...................................................O...................................................O............ 17.10. Ćwiczenia...................................................O...................................................O......... ......462 ...463 4QFKCđ ĦTQFQYKUMQY[MQPCPKC   18.1. Określanie cech środowiska wykonania ...................................................O..................465 18.1.1. Program testowy ...................................................O.............................................465 18.1.2 Zmienne statyczne i inicjalizacja...................................................O.....................468 18.1.3. Ramka stosu...................................................O...................................................O.469 18.1.4. Zmienne register ...................................................O.............................................470 18.1.5. Długość identyfikatorów zewnętrznych ...................................................O.........471 18.1.6. Określanie układu ramki stosu ...................................................O.......................472 18.1.7. Efekty uboczne wyrażeń...................................................O.................................477 18.2. Współpraca z kodem asemblera ...................................................O..............................478 18.3. Efektywność działania ...................................................O.............................................479 18.3.1. Poprawianie wydajności ...................................................O.................................480 18.4. Podsumowanie ...................................................O...................................................O......482 18.5. Podsumowanie ostrzeżeń...................................................O.........................................482 18.6. Podsumowanie wskazówek ...................................................O.....................................483 18.7. Pytania ...................................................O...................................................O............ 18.8. Ćwiczenia...................................................O...................................................O.......... ......483 ....483 QFCVGM# 9[DTCPGTQYKæCPKCRTQDNGOÎY   QFCVGM$ $KDNKQITCHKC  5MQTQYKF  Rozdział 12. 9[MQT[UVCPKGUVTWMVWT KYUMCļPKMÎY Łącząc ze sobą wskaźniki i struktury, można tworzyć bardzo efektywne struktury danych. W rozdziale tym przyjrzymy się kilku technikom wykorzystania struktur i wskaźników. Wiele czasu poświęcimy strukturze nazywanej listą — nie tylko dlatego, że jest bardzo użyteczna, ale również dlatego, że wiele z technik wykorzystywanych do manipulowania listą można również stosować do innych struktur danwych. .KUV[ Jeżeli nie jesteś zaznajomiony z pojęciem listy, nakreślę krótkie wprowadzenie. Lista to zbiór niezależnych struktur (często nazywanych węzłami), zawierających dane. Poszcze- gólne węzły na liście są połączone ze sobą za pomocą połączeń lub wskaźników. Program odwołuje się do węzłów listy podążając za wskaźnikami. Zwykle węzły są tworzone dynamicznie, choć czasami można spotkać się z listą skonstruowaną z elementów tablicy węzłów. Nawet w takim przypadku program przegląda listę wpodążając za wskaźnikami. .KUVCLGFPQMKGTWPMQYC Na liście jednokierunkowej każdy węzeł zawiera wskaźnik do następnego węzła listy. Pole wskaźnikowe w ostatnim elemencie zawiera wartość 07.., wskazując, że na liście nie ma już więcej węzłów. Aby pamiętać, w którym miejscu lista się zaczyna, wykorzy- stywany jest wskaźnik nazywany korzeniem lub głową listy. Wskaźnik korzenia wska- zuje na pierwszy element listy. Zwróć uwagę, że korzeńw nie zawiera żadnych danych. Poniżej przedstawiono diagram listy jednokierunkowejw. 288 Język C. Wskaźniki. Vademecum profesjonalisty Węzły z tego przykładu są strukturami utworzonymi na pwodstawie następujących deklaracji. V[RGFGHUVTWEV9 .] UVTWEV9 . RQNCEGPKG KPVYCTVQUE _9GGN W każdym z węzłów zapisywana jest jedna dana — liczba KPV. Przedstawiona lista zawiera trzy węzły. Jeżeli zaczniemy od korzenia i za wskaźnikiem podążymy do pierwszego węzła, możemy uzyskać dostęp do danych zapisanych w tym węźle. Podążając za wskaźnikiem, przechodzimy z pierwszego węzła do drugiego i uzyskujemy dostęp do jego danych. Na koniec następny wskaźnik przenosi nas do ostatniego węzła. Wartość zero została wyko- rzystana do pokazania wskaźnika 07..; oznacza on, że na liście nie ma już więcej węzłów. Na diagramie węzły zostały umieszczone obok siebie w celu pokazania logicznego uporządkowania zapewnianego przez połączenia. W rzeczywistości węzły mogą być roz- siane po całej pamięci. Dla programu przetwarzającego taką listę nie ma żadnej różnicy, czy węzły sąsiadują ze sobą czy nie, ponieważ program zawsze korzysta z połączeń, aby przejść z jednego węzła do drugiego. Lista jednokierunkowa może być przeglądana od początku do końca dzięki podążaniu za wskaźnikami, ale nie można jej przeglądać wstecz. Inaczej mówiąc, gdy program dojdzie do ostatniego węzła listy, jedyną możliwością cofnięcia się jest wykorzystanie wskaźnika korzenia. Oczywiście program może zapamiętać wskaźnik do bieżącego węzła przed przejściem do następnego węzła, może nawet zapamiętywać wskaźniki wskazujące na kilka kolejnych węzłów. Jednak lista jest strukturą dynamiczną i może zwiększyć się do kilkuset lub kilku tysięcy węzłów — nierealne jest więc zapamiętywanie wskaźników do wszystkich poprzednich węzłów w liście. Węzły przedstawionej listy są połączone w taki sposób, że wartości w węzłach są uporząd- kowane w kolejności rosnącej. Takie uporządkowanie jest ważne w przypadku niektórych aplikacji, na przykład dla porządkowania spotkań względem czasu. Możliwe jest również tworzenie listy nieuporządkowanej, jeżeli aplikacjaw nie wymaga uporządkowania. 9UVCYKCPKGYúđÎYFQNKUV[LGFPQMKGTWPMQYGLK W jaki sposób należy wstawiać nowy węzeł do uporządkowanej listy jednokierunkowej? Załóżmy, że mamy nową wartość — 12 — i musimy wstawić ją do przedstawionej po- wyżej listy. Pod względem koncepcyjnnym zadanie jest proste: zaczynamy od początku listy i podążamy za wskaźnikami, aż znajdziemy pierwszy węzeł o wartości większej niż 12. Wstawiamy wówczas nową wartość do listy przed wznalezionym węzłem. W praktyce algorytm jest bardziej interesujący. Przeglądamy listę i zatrzymujemy się, gdy osiągniemy węzeł z wartością 15 — pierwszy, który jest większy od 12. Wiemy, że nowa wartość musi być dodana do listy bezpośrednio przed tym węzłem, ale przed reali- zacją tej operacji zmienione musi zostać pole wskaźnikowe poprzedniego węzła; tym- czasem my nie możemy się cofnąć. Rozwiązaniem jest zapamiętywanie wskaźnika do poprzedniego węzła. Teraz możemy zaprojektować funkcję wstawiającą węzeł do uporządkowanej listy jedno- kierunkowej. W listingu 12.1 przedstawiamy pierwsze podejście do tego problemu. Rozdział 12.  Wykorzystanie struktur i wskaźników 289 .KUVKPI Wstawianie węzła do uporządkowanej listy jednokierunkowej — pierwsza próba (wstaw1.c)  9UVCYKCPKGYúđCFQWRQTæFMQYCPGLNKUV[LGFPQMKGWTWPMQYGL#TIWOGPVCOK UæYUMCļPKMFQRKGTYUGIQYúđCNKUV[KYCTVQħèFQWYUVCYKGPKC  KPENWFGUVFNKDJ KPENWFGUVFKQJ KPENWFGYGGNARQLJ FGHKPG(#.5  FGHKPG647  KPV YUVCYANKUVCARQL 9GGN DKGKPVPQYCAYCTV ] 9GGN RQRT 9GGN PQY[   5WMCPKGYđCħEKYGIQOKGLUECRQRTGRTGINæFCPKGWNKUV[  FQOQOGPVWPCNGKGPKCYúđCMVÎTGIQYCTVQħèLGUVYKúMUC  NWDTÎYPCPQYGLYCTVQħEK   YJKNG DKGŌ YCTVQUEPQYCAYCTV ] RQRTDKG DKGDKGŌ RQNCEGPKG _   7VYQTGPKGPQYGIQYúđCKCRCOKúVCPKGYPKOPQWYGLYCTVQħEK  9RT[RCFMWPKGRQYQFGPKCYTCECPCLGUVYCTVQħè(#.5    PQY[ 9GGN OCNNQE UKGQH 9GGN   KH PQY[07.. TGVWTP(#.5  PQY[Ō YCTVQUEPQYCAYCTV   9UVCYKGPKGPQYGIQYúđCFQNKUV[KYTÎEGPKGWYCTVQħEK647    PQY[Ō RQNCEGPKGDKG RQRTŌ RQNCEGPKGPQY[ TGVWTP647  _ Funkcję tę wywołujemy w następujący sposób: Y[PKMYUVCYANKUVCARQL MQTGP  Prześledźmy kod, aby sprawdzić, czy wartość 12 jest prawidłowo wstawiana do listy. Na początek funkcja jest wywoływana z wartością zmiennej MQTGP, która jest wskaźni- kiem na pierwszy węzeł listy. Poniżej przedstawiono stan listy na początku wykonywania funkcji: 290 Język C. Wskaźniki. Vademecum profesjonalisty Diagram ten nie zawiera zmiennej MQTGP, ponieważ funkcja nie może się do niej odwo- ływać. Kopia jej wartości jest przekazana do funkcji jako parametr DKG, ale funkcja nie może odwoływać się do MQTGP. Teraz DKGŌ YCTVQUE jest równe 5, czyli mniej niż 12 — wykonywane jest więc ciało pętli, w którym przesuwanwe są nasze wskaźniki. W chwili obecnej DKGŌ YCTVQUE jest równe 10, więc ciało pętli jest wykonywane kolejny raz, co daje następujący wynik: Teraz DKGŌ YCTVQUE jest większe od 12, więc pętla jest przerywana. W tym momencie ważny staje się wskaźnik RQRT, ponieważ wskazuje na węzeł, który musi zostać zmieniony, aby możliwe było dodanie nowej wartości. Na początek należy jednak utworzyć nowy węzeł i zapisać w nim wartość. Następny diagram pokazuje stan listy po skopiowaniu wartości do nowego węzła. Rozdział 12.  Wykorzystanie struktur i wskaźników 291 Włączenie nowego węzła do listy wymaga wykonania dwóch wkroków. Pierwszym jest: PQY[Ō RQNCEGPKGDKG co powoduje, że nowy węzeł wskazuje na węzeł będący następnym węzłem na liście — pierwszym, którego wartość jest większa niż 12. Po tej operacji lista wygląda następująco: Drugim krokiem jest zmiana wskaźnika w poprzednim węźle — ostatnim o wartości mniejszej niż 12 — tak, aby wskazywał na nowy węzeł. Operacja ta jest wykonywana przez instrukcję: RQRTŌ RQNCEGPKGPQY[ Wynikiem wykonania tego kroku jest: 292 Język C. Wskaźniki. Vademecum profesjonalisty Funkcja kończy się, pozostawiając listę w następującymw stanie: Rozpoczynając od wskaźnika MQTGP i podążając za wskaźnikami, możemy sprawdzić, że nowy węzeł został prawidłowo wstawiony. 7UWYCPKGDđúFÎYHWPMELKYUVCYKCLæEGL Niestety funkcja wstawiająca jest nieprawidłowa. Spróbuj wstawić do listy wartość 20, a zobaczysz, na czym polega problem; pętla YJKNG przejdzie poza koniec listy i wykona dereferencję wskaźnika 07... Aby rozwiązać ten problem, musimy przed obliczeniem DKGŌ YCTVQUE sprawdzać, czy wskaźnik DKG jest różny od 07... YJKNG DKG07..DKGŌ YCTVQUEYCTVQUE ] Następny problem jest poważniejszy. Prześledź zachowanie funkcji podczas wstawiania do listy wartości 3. Co się dzieje? Aby wstawić element na początek listy, funkcja musi zmienić wskaźnik MQTGP. Funkcja jednak nie może odwoływać się do wartości MQTGP. Najprostszym sposobem naprawienia tego problemu jest zmiana zmiennej MQTGP na zmienną globalną, dzięki czemu funkcja wstawiająca mogłaby ją modyfikować. Niestety podejście to jest najgorszym sposobem rozwiązania tego problemu, ponieważ funkcja mogłaby być używana tylko dla jednej listy. Lepszym rozwiązaniem jest przekazywanie wskaźnika do MQTGP jako argumentu. Funkcja mogłaby wykonywać dereferencję zarówno w celu pobrania wartości MQTGP (wskaźnika do pierwszego elementu listy), jak i zapisywania nowej wartość wskaźnika. Jaki powinien być typ takiego parametru? Zmienna MQTGP jest wskaźnikiem na 9GGN, więc parametr powinien mieć typ 9GGN: wskaźnik do wskaźnika na 9GGN. Funkcja zamieszczona w listingu 12.2 zawiera te modyfikacje. Funkcję tę należy wywoływać w następujący sposób: Y[PKMYUVCYANKUVCARQL MQTGP  .KUVKPI Wstawianie węzła do uporządkowanej listy jednokieręunkowej — druga próba (wstaw2.c)  9UVCYKCPKGFQWRQTæFMQYCPGLNKUV[LGFPQMKGTWPMQYGL#TIWOGPVCOK UæYUMCļPKMFQYUMCļPKMCMQTGPKCNKUV[KYCTVQħèWFQYUVCYKGPKC  Rozdział 12.  Wykorzystanie struktur i wskaźników 293 KPENWFGUVFNKDJ KPENWFGUVFKQJ KPENWFGYGGNARQLJ FGHKPG(#.5  FGHKPG647  KPV YUVCYANKUVCARQL 9GGN MQTGPAYUMKPVPQYCAYCTV ] 9GGN DKG 9GGN RQRT 9GGN PQY[   2QDTCPKGYUMCļPKMCFQRKGTYUGIQYúđC   DKG MQTGPAYUM RQRT07..   5WMCPKGYđCħEKYGIQOKGLUECRQRTGRTGINæFCPKGWNKUV[  FQOQOGPVWPCNGKGPKCYúđCMVÎTGIQYCTVQħèLGUWVYKúMUC  NWDTÎYPCPQYGLYCTVQħEK   YJKNG DKG07..DKGŌ YCTVQUEPQYCAYCTV ] RQRTDKG DKGDKGŌ RQNCEGPKG _   7VYQTGPKGPQYGIQYúđCKCRCOKúVCPKGYPKOPQYGLYCTVQħEK  9RT[RCFMWPKGRQYQFGPKCYTCECPCLGUVYCTVWQħè(#.5    PQY[ 9GGN OCNNQE UKGQH 9GGN   KH PQY[07.. TGVWTP(#.5  PQY[Ō YCTVQUEPQYCAYCTV   9UVCYKGPKGPQYGIQYúđCFQNKUV[KYTÎEGPKGWYCTVQħEK647    PQY[Ō RQNCEGPKGDKG KH RQRT07..  MQTGPAYUMPQY[ GNUG RQRTŌ RQNCEGPKGPQY[ TGVWTP647  _ Ta druga wersja zawiera kilka dodatkowych instrukcjiw: RQRT07.. Instrukcja ta jest niezbędna, ponieważ później możemy sprawdzić, czy nowa wartość powinna być pierwszym węzłem na liście. DKG MQTGPAYUM 294 Język C. Wskaźniki. Vademecum profesjonalisty Wykorzystano tu dereferencję na argumencie będącym wswkaźnikiem do korzenia, dzięki czemu pobraliśmy wartość wskaźnika MQTGP — wskaźnika do pierwszego węzła listy. Na koniec funkcji dodane zostały instrukcje: KH RQRT07..  MQTGPAYUMPQY[ GNUG RQRTŌ RQNCEGPKGPQY[ Sprawdzają one, czy nowa wartość powinna być włączona na początku listy. Jeżeli tak, za pomocą dereferencji modyfikujemy wskaźnik MQTGP t
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Język C. Wskaźniki. Vademecum profesjonalisty
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: