38996

38996



119


STALE WSKAŹNIKI

Wiesz już, że nie możemy odwołać się pod komórkę pamięci wskazywaną przez wskaźnik NULI-. Po co zatem przypisywać wskaźnikowi 0? Odpowiedź może być zaskakująca: właśnie po to. aby uniknąć błędów! Wydaje się to zabawne, ale większość (jeśli nie wszystkie) funkcje, które zwracają wskaźnik w przypadku błędu zwrócą właśnie NULL, czyli zero. Tutaj rodzi się kok-jua wskazówka: jeśli w danej zmiennej przechowujemy wskaźnik, zwrócony wcześniej przez jakąś funkcję zawsze sprawdzajmy, czy nie jest on równy 0 (NULL). Wtedy mamy pewność, źe funkcja zadziałała poprawnie.

Dokładniej, NULL nie jest słowem kluczowym, lecz stałą (makrem) zadeklarowaną przez dyrektywy preprocesora. Deklaracja taka może być albo wartością 0 albo też wartością 0 zrzutowaną nu void* (((void *)0)), ale też jakimś słowem kluczowym deklarowanym przez kompilator.

Warto zauważyć, że |»ouiimo przypisywania wskaźnikowi zera. nie oznacza to, że wskaźnik NULL jest reprezentowany przez same zerowe bity. Co więcej, wskaźniki NULL różnych typów mogą mieć różną wartość! Z tego powodu poniższy kod jest niepoprawny:

int ••tablica.wskaźników ■ callocOOO, sizeof •tablica.wskaznikow);

Zakłada on, że w reprezentacji wskaźnika NULL występują same zera. Poprawnym zainicjowaniem dynamicznej tablicy wskaźników wartościami NULL jest (|>oinijamy sprawzdanie wartości zwróconej przez ntalloc()):

int **tablica_wskaznikow ■ mallocOOO • sizeof *tablica_wskaznikow); int i ■ 0; while (i<100)

tablica.wskaznikow(i**] ■ 0;

Stałe wskaźniki

Tak, jak istnieją zwykłe stałe, tak samo możemy mieć stałe wskaźniki jednak są ich dwa rodzaje. Wskaźniki na stałą wartość:

const int *a; /• lub równoważnie •/ int const *a;

oraz stałe wskaźniki:

int • const b;

Pierwszy to wskaźnik, którym nie można zmienić wskazywanej wartości. Drugi to wskaźnik, którego nie można przestawić na inny adres. Dodatkowo, można zadeklarować stały wskaźnik, którym nie można zmienić wartości wskazywanej zmiennej, i również można zrobić to na dwa sposoby:

const int • const c; /• alternatywnie •/ int const • const c;

int i«0;

const int *a-4i;

int • const b-4i;

int const • const c=4i;

•a = 1;    /• kompilator zaprotestuje

•b ■ 2;    /• ok •/

•c - 3    /• kompilator zaprotestuje

a ■ b; /• ok •/

b ■ a; /• kompilator zaprotestuje c = a; /• kompilator zaprotestuje


•/


•/


•/

■/




Wyszukiwarka

Podobne podstrony:
P2210454 O rozumie 86 I.I.l się czasem, że nasze impresje są tak mgliste i słabe, że nie możemy
IMG 05 (6) XXIV. żyjemy tak płytko że nie możemy napisać autobiograficznej powieści natomiast
IMG?74 i ,pełnienia przestępstwa zarzucanego Markowi Falcncie wynika z tego, że nie możemy udziału w
Jak Zima -Nic tu po mnie-Zima już wiedziała,że nie udało jej się wygrać z Wiosną.-Ałe nie pozwolę w
skanowanie0037 (12) Że już ojczyczny nie mamy I o nią się dobijamy Z mieczem w ręku (DW VI
Ponieważ nic w moim życiu nie może iść normalnym torem, okazało się, że nie możemy wgrać żadnej gry.
pons207 8.2 Substantif et adjectifRzeczownik i przymiotnik Pewnie wiesz już, że języku francuskim pr
DSC03622 (2) zahczyłes inirsoe* onorriię. fiazem z kotegam postanowiłeś zaszaleć w karze L-‘ Gossena
□□□□ Zatrzymuję się na noc jak zwykle pod drzewem. Jutro chcę przejechać Bamako, a wiem już, że nie
DSC04686 (2) 44 195 Przed ziemią, co nas spotwarza, Że już ojczyzny nie mamy I o nią się dobijamy Z
ruszać. Lewa nóżka staje się ciężka, coraz cięższa. Jest już tak ciężka, że nie chce mi się nią rusz
img418 (3) Widzimy, że nie możemy zatem określić, do czego dąży iloraz dwóch takich ciągów, nie znaj
DSCF0226 700 Hermeneutyka i histnryzm Z takim słuchaniem wiąże się świadomość, że nie możemy powiedz
skanowanie0037 (12) Że już ojczyczny nie mamy I o nią się dobijamy Z mieczem w ręku (DW VI
img038 (47) 32 Struktura sieci2.5. Co kryje się w warstwach ukrytych? Wiesz już, że każda sieć feedf

więcej podobnych podstron