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!

 


Связанные темы