To tylko jedna z 4 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
WSKAŹNIKI / ADRESY
Wskaźnik → jest zmienną, która zawiera adres (wskazanie) innej zmiennej
lub adres dowolnego obszaru w pamięci komputera,
(np. moŜe być to adres obszaru danych lub adres kodu programu)
Ogólna postać definicji wskaźnika:
typ_danych ∗ identyfikator wskaźnika ;
Najczęściej uŜywane są wskaźniki „zdefiniowane” zawierające adres innej zmiennej.
Taki wskaźnik zawiera informację o:
• adresie zmiennej w pamięci komputera
• typie danych przechowywanych w tej zmiennej
Przykłady definicji:
int
double
char
char
∗
∗
∗
∗
wskaznik;
wsk_liczby;
wsk_znaku;
tekst;
// wskaźnik na zmienną całkowitą
// wskaźnik na zmienną rzeczywistą
// wskaźnik na pojedynczy znak
// wskaźnik na początek łańcucha znaków
(na pierwszy znak tego łańcucha)
MoŜna równieŜ korzystać ze wskaźników „niezdefiniowanych” (anonimowych).
Taki wskaźnik zawiera tylko informację o adresie początku obszaru pamięci (bez
określenia typu wskazywanych danych). Definicja takiego wskaźnika ma postać:
void ∗ identyfikator wskaźnika ;
jest to wskaźnik na „dowolny” ciąg bajtów danych.
Ze wskaźnikami i adresami związane są dwa operatory:
• operator adresu (referencji) & zwracający adres zmiennej
podanej po prawej stronie tego operatora.
• operator wyłuskania (dereferencji) ∗ identyfikujący obszar zmiennej
wskazywanej przez wskaźnik podany po prawej stronie tego operatora.
int liczba ;
int ∗wskaźnik ;
wskaznik = &liczba;
∗wskaźnik = 10;
M.Piasecki: JĘZYKI PROGRAMOWANIA 1
// przypisanie zmiennej wskaźnik
// adresu zmiennej liczba
// przypisanie wartości 10 do zmiennej
// wskazywanej przez wskaźnik
// ( tutaj jest to równowaŜne liczba = 10 )
−1−
(W5) Wskaźniki, arytmetyka wskaźników
Arytmetyka wskaźników
Na wskaźnikach mogą być wykonywane następujące operacje:
• przypisania ( = )
wsk = wskaznik_zmiennej_lub_obszaru_pamięci ;
(w przypadku niezgodności typów konieczne jest dokonanie konwersji typu)
• operacje porównania ( ==, !=, , = ):
wsk_1 == wsk_2
wsk_1
(…)
… ∗w;
w
w +1
w+2
↓
↓
↓
pamięć→
adresy → . . . 35
36
37
38
39
40
41
42
43
44
45
46
...
• operacje odejmowania wskaźników tego samego typu → wyznaczenie
„odległości” pomiędzy dwoma adresami w pamięci.
( odległości w sensie N ∗ sizeof ( typ_elementu_wskazywanego ) )
Przykłady zmiennych wskaźnikowych:
int ∗
wsk_liczby; // wskaźnik na liczbę typu int
int
tab_A[10];
// 10-cio elementowa tablica liczb int…
… 25 26 27 28 . . .
void main( )
{
// Program ilustrujący róŜne sposoby zapisu wartości do zmiennej ’b’ :
// bezpośrenio (poprzez nazwę zmiennej) oraz pośrednio, za pomocą
// wskaźnika na ’b’ lub na sąsiadujące zmienne ’a’ , ’c’, ’x’
// Wyświetlenie adresów przydzielonych zmiennym: a, b, c, x, wsk
printf(" \n Adres zmiennej A = %u " , (unsigned) &a ) ;
printf(" \n Adres zmiennej B = %u " , (unsigned…
... zobacz całą notatkę
Komentarze użytkowników (0)