Wskaźniki w języku C
Przewodnik
Jeśli chcesz błyskawicznie opanować programowanie w języku C, sięgnij po tę
książkę! Gdy już poznasz podstawy, nauczysz się także korzystać ze wskaźników. To
prawdziwa zmora wszystkich programistów, bowiem błędne wykorzystanie wskaźnika może w
okamgnieniu zrujnować Twój program. Zobacz, jak tego uniknąć i zaprzyjaźnić się ze
wskaźnikami.
Inne książki opisują wskaźniki w jednym lub dwu rozdziałach, natomiast my
poświęciliśmy im całą książkę. Dzięki temu dogłębnie poznasz ten mechanizm,
zrozumiesz go i przekonasz się, że przy odrobinie uwagi nie jest on wcale taki straszny!
W trakcie lektury wykorzystasz wskaźniki na funkcję, przygotujesz tablicę wskaźników
oraz zobaczysz, jak współdziałają one z łańcuchami znaków. Twoją uwagę z
pewnością zwrócą fragmenty omawiające zabezpieczenia oraz niewłaściwe wykorzystanie
wskaźników.
Książka ta jest jedyną pozycją na rynku w całości poświęconą wskaźnikom w
języku C.
To lektura obowiązkowa każdego programisty!
Poznaj:
koncepcję wskaźników
zastosowanie tablic wskaźników
funkcje dynamicznego alokowania pamięci
Przedmowa (9)
1. Wstęp (15)
- Wskaźniki i pamięć (16)
- Dlaczego warto opanować wskaźniki (17)
- Deklarowanie wskaźników (20)
- Interpretowanie deklaracji (22)
- Operator adresu (23)
- Wyświetlanie wartości wskaźników (24)
- Wyłuskiwanie wskaźnika za pomocą operatora adresowania pośredniego (26)
- Wskaźniki na funkcje (27)
- Pojęcie wartości null (27)
- Rodzaje wskaźników i ich rozmiary (32)
- Modele pamięci (32)
- Predefiniowane typy związane ze wskaźnikami (33)
- Operatory wskaźników (37)
- Arytmetyka wskaźnikowa (37)
- Porównywanie wskaźników (42)
- Zastosowania wskaźników (42)
- Wielopoziomowe adresowanie pośrednie (43)
- Stałe i wskaźniki (44)
- Podsumowanie (50)
2. C i dynamiczne zarządzanie pamięcią (51)
- Dynamiczna alokacja pamięci (52)
- Funkcje dynamicznego alokowania pamięci (57)
- Stosowanie funkcji malloc (58)
- Stosowanie funkcji calloc (62)
- Stosowanie funkcji realloc (63)
- Funkcja alloca i tablice o zmiennej długości (66)
- Dealokacja pamięci przy użyciu funkcji free (66)
- Przypisywanie wartości NULL do zwalnianego wskaźnika (68)
- Podwójne uwalnianie (68)
- Sterta i pamięć systemowa (70)
- Zwalnianie pamięci po zakończeniu działania programu (70)
- Wiszące wskaźniki (71)
- Przykłady wiszących wskaźników (71)
- Rozwiązywanie problemu wiszących wskaźników (74)
- Stosowanie wersji testowej do wykrywania wycieków pamięci (74)
- Techniki dynamicznej alokacji pamięci (75)
- Sprzątanie pamięci w języku C (76)
- Inicjowanie przy pozyskaniu zasobu (RAII) (76)
- Korzystanie z procedury obsługi wyjątków (77)
- Podsumowanie (78)
3. Wskaźniki i funkcje (79)
- Sterta i stos programu (80)
- Stos programu (80)
- Organizacja ramki stosu (81)
- Przekazywanie i zwracanie za pomocą wskaźnika (84)
- Stosowanie wskaźników do przekazywania danych (84)
- Przekazywanie danych poprzez wartość (85)
- Przekazywanie wskaźnika do stałej (86)
- Zwracanie wskaźnika (87)
- Wskaźniki do danych lokalnych (89)
- Przekazywanie pustych wskaźników (91)
- Przekazywanie wskaźnika do wskaźnika (91)
- Wskaźniki na funkcję (95)
- Deklarowanie wskaźników na funkcję (96)
- Stosowanie wskaźników na funkcję (97)
- Przekazywanie wskaźników na funkcję (99)
- Zwracanie wskaźników na funkcję (99)
- Stosowanie tablic wskaźników na funkcję (100)
- Porównywanie wskaźników na funkcję (101)
- Rzutowanie wskaźników na funkcję (102)
- Podsumowanie (103)
4. Wskaźniki i tablice (105)
- Tablice (106)
- Tablice jednowymiarowe (107)
- Tablice dwuwymiarowe (108)
- Tablice wielowymiarowe (109)
- Notacja wskaźnikowa i tablice (109)
- Różnice pomiędzy tablicami a wskaźnikami (112)
- Stosowanie funkcji malloc do tworzenia tablic jednowymiarowych (113)
- Stosowanie funkcji realloc do zmiany rozmiaru tablicy (114)
- Przekazywanie tablicy jednowymiarowej (118)
- Stosowanie notacji tablicowej (118)
- Stosowanie notacji wskaźnikowej (119)
- Stosowanie jednowymiarowych tablic wskaźników (120)
- Wskaźniki i tablice wielowymiarowe (122)
- Przekazywanie tablicy wielowymiarowej (125)
- Dynamiczna alokacja tablicy dwuwymiarowej (128)
- Alokowanie pamięci o potencjalnie nieciągłym obszarze (129)
- Alokacja pamięci o ciągłym obszarze (129)
- Tablice postrzępione i wskaźniki (131)
- Podsumowanie (135)
5. Wskaźniki i łańcuchy (137)
- Podstawowe wiadomości na temat wskaźników (138)
- Deklaracja łańcucha (139)
- Pula literałów łańcuchowych (139)
- Inicjalizacja łańcucha (141)
- Standardowe operacje wykonywane na łańcuchach (145)
- Porównywanie łańcuchów (145)
- Kopiowanie łańcuchów (147)
- Łączenie łańcuchów (149)
- Przekazywanie łańcuchów (153)
- Przekazywanie prostego łańcucha (153)
- Przekazywanie wskaźnika na stałą typu char (155)
- Przekazywanie wskaźnika wymagającego inicjalizacji (155)
- Przekazywanie argumentów do aplikacji (157)
- Zwracanie łańcuchów (158)
- Zwracanie adresu literału (158)
- Zwracanie adresu pamięci adresowanej dynamicznie (160)
- Wskaźniki na funkcje i łańcuchy (162)
- Podsumowanie (165)
6. Wskaźniki i struktury (167)
- Wstęp (168)
- Alokacja struktury w pamięci (169)
- Zagadnienia związane z dealokacją struktury (170)
- Unikanie narzutu wynikającego ze stosowania funkcji malloc i free (174)
- Stosowanie wskaźników do obsługi struktur danych (176)
- Jednostronna lista powiązana (177)
- Stosowanie wskaźników do obsługi kolejek (185)
- Stosowanie wskaźników do obsługi stosu (188)
- Stosowanie wskaźników do obsługi drzewa (190)
- Podsumowanie (194)
7. Problemy z zabezpieczeniami i niewłaściwe stosowanie wskaźników (195)
- Deklaracja i inicjalizacja wskaźników (197)
- Niewłaściwa deklaracja wskaźnika (197)
- Niepowodzenie inicjalizacji wskaźnika przed użyciem (198)
- Rozwiązywanie problemów z niezainicjalizowanymi wskaźnikami (198)
- Problemy wynikające ze stosowania wskaźników (199)
- Wykrywanie wartości zerowej (200)
- Niewłaściwe stosowanie operatora wyłuskiwania (201)
- Wiszące wskaźniki (201)
- Uzyskiwanie dostępu do pamięci znajdującej się poza granicami tablicy (202)
- Błędne obliczenie rozmiaru tablicy (203)
- Niewłaściwe stosowanie operatora sizeof (203)
- Zawsze dopasowuj do siebie typy wskaźników (204)
- Wskaźniki ograniczone (205)
- Problemy z zabezpieczeniami związane z łańcuchami (206)
- Arytmetyka wskaźnikowa i struktury (207)
- Problemy związane ze wskaźnikami na funkcję (209)
- Problemy związane z dealokacją pamięci (211)
- Dublowanie funkcji free (211)
- Czyszczenie danych wrażliwych (211)
- Stosowanie narzędzi analizy statycznej (212)
- Podsumowanie (213)
8. Pozostałe techniki (215)
- Rzutowanie wskaźników (216)
- Uzyskiwanie dostępu do adresu specjalnego przeznaczenia (217)
- Uzyskiwanie dostępu do portu (219)
- Uzyskiwanie dostępu do pamięci przy użyciu DMA (220)
- Określanie porządku bajtów danej maszyny (220)
- Aliasing wskaźników i słowo kluczowe restrict (221)
- Stosowanie unii do reprezentacji wartości na różne sposoby (223)
- Strict aliasing (225)
- Stosowanie słowa kluczowego restrict (226)
- Wątki i wskaźniki (227)
- Współdzielenie wskaźników przez wątki (228)
- Stosowanie wskaźników na funkcję do obsługi wywołań zwrotnych (231)
- Techniki obiektowe (233)
- Tworzenie i stosowanie wskaźników nieprzeźroczystych (233)
- Polimorfizm w języku C (237)
- Podsumowanie (242)
Skorowidz (243)
256 stron, Format: 14.5x21.0cm, oprawa miękka