Pascal - wskaźniki
Wskaźniki w Pascalu są łatwe i przyjemne do nauczenia. Niektóre zadania programowania Pascal są łatwiejsze do wykonania za pomocą wskaźników, a innych zadań, takich jak dynamiczna alokacja pamięci, nie można wykonać bez użycia wskaźników. Dlatego konieczne jest nauczenie się wskaźników, aby zostać doskonałym programistą Pascala. Zacznijmy uczyć się ich w prostych i łatwych krokach.
Jak wiecie, każda zmienna jest miejscem w pamięci i każda lokalizacja pamięci ma zdefiniowany adres, do którego można uzyskać dostęp za pomocą nazwy zmiennej wskaźnikowej, która oznacza adres w pamięci.
Co to są wskaźniki?
Wskaźnik to zmienna dynamiczna, której wartością jest adres innej zmiennej, tj. Bezpośredni adres miejsca w pamięci. Jak w przypadku każdej zmiennej lub stałej, należy zadeklarować wskaźnik, zanim będzie można go użyć do przechowywania adresu zmiennej. Ogólną postacią deklaracji zmiennej wskaźnikowej jest -
type
ptr-identifier = ^base-variable-type;
Typ wskaźnika jest definiowany przez poprzedzanie strzałki w górę symbolu daszka (^) typem podstawowym. Typ podstawowy definiuje typy elementów danych. Gdy zmienna wskaźnikowa zostanie zdefiniowana jako określonego typu, może ona wskazywać tylko elementy danych tego typu. Po zdefiniowaniu typu wskaźnika możemy użyćvar deklaracja do zadeklarowania zmiennych wskaźnikowych.
var
p1, p2, ... : ptr-identifier;
Poniżej znajduje się kilka prawidłowych deklaracji wskaźników -
type
Rptr = ^real;
Cptr = ^char;
Bptr = ^ Boolean;
Aptr = ^array[1..5] of real;
date-ptr = ^ date;
Date = record
Day: 1..31;
Month: 1..12;
Year: 1900..3000;
End;
var
a, b : Rptr;
d: date-ptr;
Zmienne wskaźnika są wyłuskiwane przy użyciu tego samego symbolu daszka (^). Na przykład powiązaną zmienną, do której odwołuje się wskaźnik rptr , jest rptr ^ . Dostęp do niego można uzyskać jako -
rptr^ := 234.56;
Poniższy przykład zilustruje tę koncepcję -
program exPointers;
var
number: integer;
iptr: ^integer;
begin
number := 100;
writeln('Number is: ', number);
iptr := @number;
writeln('iptr points to a value: ', iptr^);
iptr^ := 200;
writeln('Number is: ', number);
writeln('iptr points to a value: ', iptr^);
end.
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200
Drukowanie adresu pamięci w Pascalach
W Pascalu możemy przypisać adres zmiennej do zmiennej wskaźnikowej za pomocą operatora adresu (@). Używamy tego wskaźnika do manipulowania i uzyskiwania dostępu do elementu danych. Jeśli jednak z jakiegoś powodu musimy pracować z samym adresem pamięci, musimy zapisać go w zmiennej typu słowo.
Rozszerzmy powyższy przykład, aby wydrukować adres pamięci przechowywany we wskaźniku iptr -
program exPointers;
var
number: integer;
iptr: ^integer;
y: ^word;
begin
number := 100;
writeln('Number is: ', number);
iptr := @number;
writeln('iptr points to a value: ', iptr^);
iptr^ := 200;
writeln('Number is: ', number);
writeln('iptr points to a value: ', iptr^);
y := addr(iptr);
writeln(y^);
end.
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200
45504
Wskaźniki NIL
Przypisanie pliku NILwartość do zmiennej wskaźnikowej w przypadku, gdy nie masz dokładnego adresu do przypisania. Odbywa się to w momencie deklaracji zmiennej. Przypisany wskaźnikNILnigdzie nie wskazuje. Rozważ następujący program -
program exPointers;
var
number: integer;
iptr: ^integer;
y: ^word;
begin
iptr := nil;
y := addr(iptr);
writeln('the vaule of iptr is ', y^);
end.
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
The value of ptr is 0
Aby sprawdzić nil wskaźnik, możesz użyć instrukcji if w następujący sposób -
if(ptr <> nill )then (* succeeds if p is not null *)
if(ptr = nill)then (* succeeds if p is null *)
Wskaźniki Pascal w szczegółach
Wskaźniki mają wiele, ale łatwych koncepcji i są bardzo ważne dla programowania w języku Pascal. Istnieje kilka ważnych pojęć dotyczących wskaźników, które powinny być jasne dla programisty Pascala:
Sr.No | Koncepcja i opis |
---|---|
1 | Pascal - Arytmetyka wskaźnika Istnieją cztery operatory arytmetyczne, których można używać na wskaźnikach: inkrementacja, dekrementacja, +, - |
2 | Pascal - tablica wskaźników Możesz zdefiniować tablice do przechowywania wielu wskaźników. |
3 | Pascal - wskaźnik do wskaźnika Pascal pozwala mieć wskaźnik na wskaźniku i tak dalej. |
4 | Przekazywanie wskaźników do podprogramów w Pascalu Przekazanie argumentu przez odniesienie lub przez adres umożliwia zmianę przekazanego argumentu w podprogramie wywołującym przez wywołany podprogram. |
5 | Zwróć wskaźnik z podprogramów w Pascalu Pascal umożliwia podprogramowi zwrócenie wskaźnika. |