38995

38995



118


ROZDZIAŁ 17. WSKAŹNIKI

Zwróćmy uwagę na wywołanie func(kz);. Należy pamiętać, by do funkcji przekazać adres zmiennej a nie samą zmienną. Jeśli byśmy napisali func(z) ; to funkcja starałaby się zmienić komórkę pamięci o numerze 3. Kompilator powinien ostrzec w takim przypadku o konwersji z typu int do wskaźnika, ale często kompiluje taki program pozostając na ostrzeżeniu.


Nie gra roli czy przy deklaracji funkcji jako argument funkcji ]M>duinv wskaźnik czy tablicę (z |xxlanym rozmiarem lub nie), np. poniższe deklaracje są identyczne:

void func(int ptr[]); void func(int *ptr);

Można przyjąć konwencję, że deklaracja określa czy funkcji przekazujemy wskaźnik do pojedynczy argument czy do sekwencji, ale równie dobrze można za każdym razem stosować gwiazdkę.

Pułapki wskaźników

Ważne jest. aby przy posługiwaniu się wskaźnikami nigdy nie próbować odwoływać się do komórki wskazywanej przez wskaźnik o wartości NULŁ lub niezainicjowany wskaźnik! Przykładem nieprawidłowego kodu, może być np.:

int *wsk;

printf ("zawartość komorki: Xd\n", *(wsk)); /• Błąd • /

wsk =0; /• 0 w kontekście wskaźników oznacza wskaźnik NULL •/

printf ("zawartość komorki: %d\n", *(wsk)); /• Błąd •/

Należy również uważać, aby nie odwoływać się do komórek poza przydzieloną pamięcią.

np.:

int tab[) ■ { 0, 1, 2 >; tab[3) - 3;    /• Błąd •/

Pamiętaj też. że możesz być rozczarowany używając operatora sizeof, podając zmienną wskaźnikową. Uzyskana wielkość będzie wielkością wskaźnika, a nie wielkością typu użytego podczas deklarowania naszego wskaźnika. Wielkość ta będzie zawsze miała taki sam rozmiar dla każdego wskaźnika, w zależności od kompilatora, a także* docelowej platformy. Zamiast tege> używaj: sizeof(0waka£nik). Przykład:

char *zmienna;

int a = sizeof zmienna; /* a wynosi np. 4, tj. sizeof(char*) */ a * sizeof(char*);    /* robimy to samo, co wyżej */

a ■ sizeof *zmienna;    /• zmienna a ma teraz przypisany rozmiar

pojedyńczego znaku, tj. 1 •/ a * sizeof(char);    /* robimy to samo, co wyżej •/

Na co wskazuje NULL?

Analizując kody źródłowe programów często można spotkać taki oto zapis:

void ‘wskaźnik = NULL; /* lub = 0 •/



Wyszukiwarka

Podobne podstrony:
120 ROZDZIAŁ 17. WSKAŹNIKI Wskaźniki na stalą wartość są przydatne między innymi w sytuacji gdy mamy
skanuj0233 30 Rozdział 1 Jednocześnie zwraca się uwagę na fakt, że niekoniecznie strategię należy łą
skan0 (4) ROZDZIAŁ 1 Skoro zwróciliśmy już uwagę na praktykę w kryzysach ekologicznych, zauważymy o
S5001345 (2) Fot. 31. Starsze dziewczynki wykonują próbę „skały”, zwróćmy uwagę na dobrze ukierunkow
finanse1 Rozdział 17.MATERIAŁ DODATKOWY Pieniądze na wyspie Yap Wyspa Yap leży na Oceanie Spokojnym
Zwróćmy uwagę na wartości przypisywane zmiennym mini, maxi, min2 oraz max2 przed wykonaniem każdego
Zasady Wykładni Prawa L Morawski&7 • « ■ Rozdział XIII. Reguły kolizyjne ■ ■ «• uwagę na fakt, że k
Inga Iwasiów Gender dla średniozaawansowanych2 Zwróćmy uwagę na pojawiające się w obu zacytowanyc
UNTITL14 Diagram 1.4 Kurs FRF/USD w latach 1985-1994. Zwróćmy uwagę na silną linię wsparcia w dolnej
UNTITL15 ROZSZYFROWAĆ RYNEK Diagram 1.8 Kurs ITLAISD w latach 1983-1994. Zwróćmy uwagę na dwie linie
P4200278 naq* śmdnłokwadratown Aproksymacja jednostajna 1 Potrzebne pochodne cząstkowe (zwróćmy
tele0017 Poprawianie jakości i przetwarzanie obrazów wielospektralnych Zwróćmy uwagę na kształt hist
62 (236) else Write ( . ); Writeln; end; Readln; end. Zwróćmy uwagę na sposób indeksowania tablicy.

więcej podobnych podstron