Wskaźniki 135
Wskaźniki 135
ANALIZA:
W tym programie deklarujemy dwie zmienne: mojWiek (typu int) i pWiek (wskaźnik na zmienną typu int) przechowujący adres zmiennej mojWiek. W linii 10, do zmiennej mojWiek, przypisujemy wartość 5. Efekt przypisania widoczny jest w linii 11.
W linii 12, do wskaźnika pWiek, przypisujemy adres zmiennej mojWiek. W linii 14 odczytujemy wartość spod adresu przechowywanego w pWiek i wypisujemy tę wartość. W linii 18, do zmiennej o adresie przechowywanym we wskaźniku pWiek (mojWiek), przypisujemy wartość 7. Na 7 zmienia się zawartość zmiennej mojWiek. Efekt przypisania wypisywany jest w liniach 20-21.
W linii 26 do zmiennej mojWiek przypisujemy wartość 9. Wartość tę, bezpośrednio i pośrednio, odczytujemy odpowiednio w liniach 28 i 29.
Wskaźniki pozwalają na manipulowanie adresami bez wiedzy o ich faktycznej wartości. Powiedzieliśmy, że kiedy przypisujemy adres zmiennej do wskaźnika, to on na prawdę ma wartość równą adresowi tej zmiennej. Dlaczego by jednak tego nie sprawdzić? Listing 9.3. ilustruje ten pomysł.
Listing 9.3. Sprawdzenie co jest przechowywane we wskaźniku
1: // Listing 9.3 Co przechowuje wskaźnik?
2:
3: #include <iostream.h>4:
5: int main()
6: {
7: unsigned short int mojWiek = 5, twojWiek = 10;
8: unsigned short int * pWiek = SmojWiek; // wskaYnik
9:
10: cout « "mojWiek:\t" « mojWiek « "\t\ttwojWiek:\t" «
wtwojWiek « "\n";
11: cout « "SmojWiek:\t" « SmojWiek « "\tStwojWiek:\t" «
**StwojWiek «”\n";
12:
13: cout « "pWiek:\t\t" « pWiek « "\n";
14: cout « "*pWiek:\t\t" « *pWiek « "\n";
15:
16: pWiek = StwojWiek; // przypisz nowy adres
17:
18: cout « "mojWiek:\t" « mojWiek « "\t\ttwojWiek:\t" «
StwojWiek « "\n";
19: cout « "SmojWiek:\t" « SmojWiek « "\tStwojWiek:\t" «
'•StwojWiek «"\n";
20:
21: cout « "pWiek:\t\t" « pWiek « "\n";
22: cout « "*pWiek:\t\t" « *pWiek « "\n";
23:
24: cout « "SpWiek:\t\t" « spWiek « "\n";
25: return 0;
26: }
5. Efekt przypisania widoczny jest w linii 11.
W tym programie deklarujemy dwie zmienne: mojWiek (typu int) i pWiek (wskaźnik na zmienną typu int) przechowujący adres zmiennej mojWiek. W linii 10, do zmiennej mojWiek, przypisujemy wartość
W linii 12, do wskaźnika pWiek. przypisujemy adres zmiennej mojWiek. W linii 14 odczytujemy wartość spod adresu przechowywanego w pWiek i wypisujemy tę wartość. W linii 18, do zmiennej o adresie przechowywanym we wskaźniku pWiek (mojWiek), przypisujemy wartość 7. Na 7 zmienia się zawartość zmiennej mojWiek. Efekt przypisania wypisywany jest w liniach 20-21.
W linii 2fi dn zmiennej mojWiek przypisujemy wartość 9. Wartość tę, bezpośrednio i pośrednio, odczytujemy odpowiednio w liniach 28 i 29.
Wskaźniki pozwalają na manipulowanie adresami bez wiedzy o ich faktycznej wartości. Powiedzieliśmy, że kiedy przypisujemy adres zmiennej do wskaźnika, to on na prawdę ma wartość równą adresowi tej zmiennej. Dlaczego by jednak tego nie sprawdzić? Listing 9.3. ilustruje ten pomysł.
Listing 9.3. Sprawdzenie co jest przechowywane we wskaźniku
1: // Listing 9.3 Co przechowuje wskaźnik?
2
3
5
6
7
8 9
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20
21
22
23
24
25
26
#include <iostream.h>4: int mainO
unsigned short int mojWiek = 5, twojWiek = 10; unsigned short int * pWiek = SmojWiek; // wskaźnik
cout « "mojWiek:\t" « mojWiek « "\t\ttwojWiek:\t" « “"twojWiek « "\n”;
cout « "SmojWiek:\t" « SmojWiek « "\tStwojWiek:\t" « “StwojWiek «"\n";
cout « "pWiek:\t\t" « pWiek « "\n"; cout « "*pWiek:\t\t" « *pWiek « "\n";
pWiek = StwojWiek;
// przypisz nowy adres
cout « "mojWiek:\t" « mojWiek « "\t\ttwojWiek:\t“ « “twojWiek « "\n";
cout « "SmojWiek:\t" « SmojWiek « "\tStwojWiek:\t" « “StwojWiek «"\n";
cout « "pWiek:\t\t" « pWiek « "\n"; cout « "*pWiek:\t\t" « ‘pWiek « "\n";
cout « "SpWiek:\t\t" « SpWiek « "\n"; return 0;