BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 6 | UU: 217

Podsumowanie

Wskaźniki są często uważane za jedną z natrudniejszych koncepcji programistycznych w ogóle. Wielu całkiem dobrych koderów ma niekiedy większe lub mniejsze kłopoty w ich stosowaniu.

Celowo nie wspomniałem o tych opiniach, abyś mógł najpierw samodzielnie przekonać się o tym, czy zagadnienie to jest faktycznie takie skomplikowane. Dołożyłem przy tym wszelkich starań, by uczynić je chociaż trochę prostszym do zrozumienia. Jednocześnie chciałem jednak, aby zawarty tu opis wskaźników był jak najbardziej dokładny i szczegółowy. Wiem, że pogodzenie tych dwóch dążeń jest prawie niemożliwe, ale mam nadzieję, że wypracowałem w tym rozdziale w miarę rozsądny kompromis.

Zacząłem więc od przedstawienia garści przydatnych informacji na temat samej pamięci operacyjnej komputera. Podejrzewam, że większość czytelników nawet i bez tego była wystarczająco obeznana z tematem, ale przypomnień i uzupełnień nigdy dość :) Przy okazji wprowadziliśmy sobie samo pojęcie wskaźnika.

Dalej zajęliśmy się wskaźnikami na zmienne, ich deklarowaniem i wykorzystaniem: do wspomagania pracy z tablicami, przekazywania parametrów do funkcji czy wreszcie dynamicznej alokacji pamięci. Poznaliśmy też referencje.

Podrozdział o wskaźnikach na funkcje składał się natomiast z poszerzenia wiadomości o samych funkcjach oraz wyczerpującego opisu stosowania wskaźników na nie.

Nieniejszy rozdział jest jednocześnie ostatnim z części 1, stanowiącej podstawowy kurs C++. Po nim przejdziemy (wreszcie ;D) do bardziej zaawansowanych zagadnień języka, Biblioteki Standardowej, a później Windows API i DirectX, a wreszcie do programowania gier.

A zatem pierwszy duży krok już za nami, lecz nadal szykujemy się do wielkiego skoku :)

Pytania i zadania

Tradycji musi stać się zadość: oto świeża porcja pytań dotyczących treści tego rozdziału oraz ćwiczeń do samodzielnego rozwiązania.

Pytania

  1. Jakie są trzy rodzaje pamięci wykorzystywanej przez komputer?
  2. Na czym polega płaski model adresowania pamięci operacyjnej?
  3. Czym jest wskaźnik?
  4. Co to jest stos i sterta?
  5. W jaki sposób deklarujemy w C++ wskaźniki na zmienne?
  6. Jak działają operatory pobrania adresu i dereferencji?
  7. Czym rózni się wskaźnik typu void * od innych?
  8. Dlaczego łańcuchy znaków w stylu C nazywamy napisami zakończonymi zerem?
  9. Dlaczego używanie wskaźników lub referencji jako parametrów funkcji może poprawić wydajność programu?
  10. W jaki sposób dynamicznie alokujemy zmienne, a w jaki tablice?
  11. Co to jest wyciek pamięci?
  12. Czym różnią się referencje od wskaźników na zmienne?
  13. Jakie podstawowe konwencje wywoływania funkcji są obecnie w użyciu?
  14. ( Trudne ) Czy funkcja może nie używać żadnej konwencji wywołania?
  15. Jakie są trzy cechy wyznaczające typ funkcji i jednocześnie typ wskaźnika na nią?
  16. Jak zadeklarować wskaźnik do funkcji o znanym prototypie?

Ćwiczenia

  1. Przejrzyj przykładowe kody z poprzednich rozdziałów i znajdź instrukcje, wykorzystujące wskaźniki lub operatory wskaźnikowe.
  2. Zmodyfikuj nieco metodę ZmienRozmiar() klasy CIntArray . Niech pozwala ona także na zmniejszenie rozmiaru tablicy.
  3. Spróbuj napisać podobną klasę dla tablicy dwuwymiarowej.
    ( Trudne ) Niech przechowuje ona elementy w ciągłym obszarze pamięci - tak, jak robi to kompilator ze statycznymi tablicami dwuwymiarowymi.
  4. Zadeklaruj wskaźnik do funkcji:
      1. pobierającej jeden parametr typu int i zwracającej wynik typu float
      2. biorącej dwa parametry typu double i zwracającej łańcuch std::string
      3. pobierającej trzy parametry: jeden typu int , drugi typu __int64 , a trzeci typu std::string i zwracającej wskaźnik na typ int
      4. ( Trudniejsze ) przyjmującej jako parametr pięcioelementową tablicę liczb typu unsigned i nic niezwracającą
      5. ( Trudne ) zwracającej wartość typu float i przyjmującej jako parametr wskaźnik do funkcji biorącej dwa parametry typu int i nic niezwracającej
      6. ( Trudne ) pobierającej tablicę pięcioelementową typu short i zwracającej jedną liczbę typu int
      7. ( Bardzo trudne ) biorącej dwa parametry: jeden typu char , a drugi typu int , i zwracającej tablicę 10 elementów typu double
        Wskazówka : to nie tylko trudne, ale i podchwytliwe :)
      8. ( Ekstremalne ) przyjmującej jeden parametr typu std::string oraz zwracającej w wyniku wskaźnik do funkcji przyjmującej dwa parametry typu float i zwracającej wynik typu bool
  1. Określ typy parametrów oraz typ wartości zwracanej przez funkcje, na które może pokazywać wskaźnik o takiej deklaracji:
      1. int (*pfnWskaznik)( int );
      2. float * (*pfnWskaznik)( const std::string&);
      3. bool (*pfnWskaznik)( void * const , int **, char );
      4. const unsigned * const (*pfnWskaznik)( void );
      5. ( Trudne ) void (*pfnWskaznik)( int (*)( bool ), const char *);
      6. ( Trudne ) int (*pfnWskaznik)( char [ 5 ], tm&);
      7. ( Bardzo trudne ) float (*pfnWskaznik( short , long , bool ))( int , int );
Kurs C++
| | | |
Copyright © 2006-2013 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker