Pascal. Покажчикові типи Pointer, ^. Текстовий тип Text

Покажчикові типи Pointer, ^. Текстовий тип Text


Зміст


Пошук на інших ресурсах:

1. Покажчикові типи. Огляд

У мові Паскаль покажчикові типи – це типи, які призначені для отримання адреси елементу програми. З допомогою покажчикових типів можна отримати доступ до змінних та констант у програмі. Значеннями змінних та констант покажчикових типів є адреса оперативної пам’яті.

Розрізняють наступні покажчикові типи:

  • Pointer – тип, що визначає нетипізований покажчик. Цей дозволяє оголошувати покажчик на змінну чи константу будь-якого іншого типу;
  • PAnsiChar, PWideChar, PChar – призначені для роботи з рядками відповідно типів AnsiChar, WideChar, Char
  • тип у форматі ^Type, де Type – один з стандартних типів або типів користувача.

 

2. Особливості використання покажчикових типів. Оголошення покажчика типу Pointer та ^

Крім наперед визначених ідентифікаторів типів (Pointer) дозволяється оголошувати покажчиковий тип з допомогою символу ^ за наступною загальною формою:

^Type

тут Type – ім’я стандартного типу (Integer, Real, …) або типу, визначеного користувачем.

Щоб отримати адресу змінної використовується конструкція виду

@variable

тут variable – змінна деякого типу.

Відповідно, операція присвоєння покажчику з іменем p адреси змінної variable в загальному випадку виглядає так

p := @variable;

Після того, як покажчику p присвоєна адреса змінної variable, можна отримувати доступ до комірки пам’яті, в якій зберігається змінна variable. Це дає можливість змінювати значення змінної variable з допомогою покажчика p за наступною загальною формою

p^ := value;

тут value – значення, яке присвоється змінній variable з допомогою покажчика p.

 

3. Покажчик на пусту адресу. Ключове слово nil. Приклад

Як тільки у програмі оголошено покажчик, в ньому зберігається деяке довільне значення, що означає довільну адресу. У цьому випадку говорять, що покажчик показує на невизначену адресу. Щоб нормалізувати значення покажчика, який ще не використовується, йому присвоюють значення пустої адреси яке визначене з допомогою ключового слова nil.
Операція присвоєння виглядає наступним чином:

ptr := nil;

тут

  • ptr – покажчик типу Pointer або виду ^.

Приклад.

var
  p1 : Pointer;
  p2 : ^Double;

begin
  ...

  p1 := nil; // присвоєння покажчику пустої адреси
  p2 := nil;

  ...
end.

 

4. Приклад оголошення покажчиків на різні типи та використання покажчикових типів Pointer та ^ для доступу до змінних

У прикладі демонструються деякі можливості використання покажчикових типів Pointer та ^.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  // Покажчики типів Pointer, ^Type
  i : Integer;
  r : Real;
  c : Char;
  p : Pointer; // Безтиповий покажчик на деяку змінну
  pI : ^Integer; // Покажчик на тип Integer
  pR : ^Real; // Покажчик на тип Real
  pC : ^Char; // Покажчик на тип Char

begin
  // 1. Покажчик на тип Integer
  i := 8;
  p := @i; // Присвоїти покажчику p адресу змінної i
  pI := p; // Присвоїти покажчику pI значення покажчика p
  pI^ := 10; // Змінити за покажчиком pI значення змінної i
  Writeln('i = ', i); // i = 10

  // 2. Значення nil
  p := nil; // значення nil - пуста адреса
  pI := nil;
  pC := nil;

  // 3. Використання покажчика на тип Real
  pR := @r; // отримати адресу змінної r
  pR^ := 20.55; // Присвоїти змінній r значення за покажчиком
  Writeln('r = ', r:2:2); // Вивести значення змінної r

  // 4. Використання покажчика на тип Char
  pC := @c; // отримати адресу змінної c, покажчик pC вказує на c
  c := '+'; // присвоїти змінній c значення
  Writeln('c = ', pC^); // вивести значення c за покажчиком pC

  Readln;
end.

Результат виконання програми

i = 10
r = 20.55
c = +

 

5. Текстовий тип Text. Робота з текстовими файлами. Приклад

Стандартний тип Text використовується для опису текстових файлів. У загальному випадку оголошення змінної типу Text має такий вигляд:

var
  variableName : Text;

тут variableName – ім’я змінної типу Text.

Приклад. У прикладі демонструється використання змінних типу Text. Спочатку в заданий файл myfile.txt записується рядок ‘Hello, world!’. Потім цей рядок зчитується і виводиться на екран.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  // Тип Text
  f1, f2:Text; // оголосити змінні типу Text
  s:String; // додаткова змінна

begin
  // Тип Text використовується для опису текстових файлів
  // 1. Запис рядка 'Hello, world!' у текстовий файл 'myfile.txt'
  // 1.1. Зв'язати змінну f1 з іменем 'myfile.txt'
  AssignFile(f1, 'myfile.txt');

  // 1.2. Відкрити файл для запису
  Rewrite(f1);

  // 1.3. Записати у файл f1 рядок 'Hello, world!'
  Writeln(f1, 'Hello, world!');

  // 1.4. Закрити файл, що зв'язаний зі змінною f1
  CloseFile(f1);

  // 2. Зчитати усі рядки з файлу 'myfile.txt'
  // 2.1. Зв'язати змінну f2 з файлом 'myfile.txt'
  AssignFile(f2, 'myfile.txt');

  // 2.2. Відкрити файл для читання
  Reset(f2);

  // 2.3. Зчитати усі рядки з файлу в циклі та вивести їх на екран
  Writeln('File ''myfile.txt'':');

  while not eof(f2) do
  begin
    Readln(f2, s);
    Writeln(s);
  end;

  // 2.4. Закрити файл, що був зв'язаний зі змінною f2
  CloseFile(f2);

  Readln;
end.

Результат виконання програми

File 'myfile.txt':
Hello, world!

 


Споріднені теми