Wskaźniki

Transkrypt

Wskaźniki
Wskaźniki
•
•
•
•
•
•
Co to jest wskaźnik?
Deklaracja wskaźnika
Użycie wskaźników
Arytmetyka na wskaźnikach
Wskaźniki a tablice
Ciąg znaków - typ char*
85
Wskaźniki
Wskaźnik to zmienna (tzw. zmienna
wskaźnikowa) przechowująca adres pamięci.
Wskaźniki służą najczęściej do przechowywania
adresów zmiennych.
Typ wskazywany to typ danej znajdującej się
pod adresem wskazywanym przez wskaźnik.
86
Deklarowanie wskaźnika
int a;
float x;
zmienne typów prostych
char znak;
int *pa;
float *px;
char *pznak;
zmienne wskaźnikowe
(wskaźniki)
87
Użycie wskaźników
Operator adresowania
&
zwraca adres zmiennej.
Operator dereferencji (wyłuskania)
wskazywaną przez wskaźnik.
*
zwraca wartość
int (32-bit)
int a, b;
int *wsk;
wsk
a
wsk = &a;
b = a;
b = *wsk;
ten sam efekt
88
Użycie wskaźników
int a, b;
deklaracje zmiennych
int *pa;
deklaracja wskaźnika
int *pb = &b;
inicjalizacja wskaźnika
pb wskazuje b
a = 5;
b = 10;
przypisanie zmiennych
pa = &a;
pobranie adresu zmiennej
pa wskazuje a
pb = pa;
przypisanie wskaźników
pb wskazuje a
b = *pb;
wyłuskanie spod wskaźnika
b ma wartość 5
*pa = 7;
przypisanie wartości
zmiennej wskazywanej
a ma wartość 7
89
Arytmetyka na wskaźnikach
float A[10];
float *pa = &A[5];
przesunięcie w pamięci o 1*4 bajty
pa++;
Inkrementacja wskaźnika &A[6]
pa += 3;
Dodanie wartości do wskaźnika
lub
&A[9]
pa = pa + 3;
(analogicznie: dekrementacja i odjęcie wartości od wskaźnika)
float *pa1, *pa2;
pa1 = &A[9];
pa2 = &A[1];
wyrażenie pa1 – pa2
zwraca wartość 8
W przypadku wskaźników zawierających adresy elementów tablicy,
różnica wskaźników jest równa liczbie elementów zawartych między
wskaźnikami (różnica indeksów elementów tablicy).
90
Wskaźniki a tablice
int i;
int A[10];
for (i = 0; i < 10; i++)
A[i] = i;
for (i = 0; i < 10; i++)
*(A+i) = i;
wersja tablicowa
(indeksowanie)
wersja wskaźnikowa
(arytmetyka na
wskaźnikach)
91
Wskaźniki a tablice
int i, j;
int M[5][5];
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
M[i][j] = i*j;
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
*(*(M+i)+j) = i*j;
wersja tablicowa
(indeksowanie)
wersja wskaźnikowa
(arytmetyka na
wskaźnikach)
92
Wskaźniki a tablice
Nazwa tablicy jest adresem jej pierwszego elementu
w pamięci (wskaźnikiem na pierwszy element).
A
&A[0]
A+1
&A[1]
A+2
&A[2]
int A[10];
int *pa = &A[0];
pa
pa+1
pa+2
A[0] A[1] A[2]
...
...
...
...
A[7] A[8] A[9]
93
Ciąg znaków - typ char*
char napis1[6] =
{ ’A’, ’N’, ’S’, ’I’, ’ ’, ’C’ };
char napis2[7] = ”ANSI C”;
A N S
I
C ’\0’
strcpy(napis2, ”Hello”);
char napis3[] = ”ANSI C”;
char *napis4 = ”ANSI C”;
napis4 = ”ANSI C”;
94

Podobne dokumenty