Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АИСД ШПОРА.docx
Скачиваний:
6
Добавлен:
27.09.2019
Размер:
54.62 Кб
Скачать

15.Операции со строками pChar.

• StrNew( var Dest: PChar) – выделяет память в куче, копирует в нее строку и

возвращает указатель на новую строку

• StrAlloc( K : Cardinal) – выделяет память под длинную строку и возвращает

указатель на местоположение первого символа новой строки (K = кол-во байт + 4 байта)

• StrCat(var Dest: PChar, Sours : PChar) – копирует длинную строку в конец указанной длинной строки

• StrMove(Dest, Source: PChar; Count: Cardinal): Pсhar – копирует из длинной строки Source в длинную строку Dest ровно Count символов, причем строки могут перекрываться

• StrDispose ( var Dest: PChar) – уничтожает строку, на которую указывает Р.

• function StrPCopy( Dest: PChar; const Source: string ): PChar; – Копирует паскалевскую строку в строку типа PChar

• function StrLCopy( Dest: PChar; const Source: PChar; MaxLen: Cardinal ):

PChar; – Копирует первые MaxLen символов из паскалевсокой строки в строку типа

PChar.

• function StrComp( const Str1, Str2: PChar ): Integer; – Быстрое сравнение 2-х строк. На выходе -1: Str1<Str2; 0: Str1=Str2; +1: Str1>Str2

• function StrLComp( const Str1, Str2: PChar; MaxLen: Cardinal ): Integer;

– Сравнивает до MaxLen символов двух строк Str1 и Str2 с учетом регистра.

Возвращает значение < 0, если Str1 < Str2, 0, если Str1 = Str2, и > 0, если Str1 >

Str2.

• function StrCopy( Dest, Source: PChar ): PChar; – Функция производит быстрое копирование строки Source в Dest и возвращает Dest.

• function StrLen( const Str: PChar ): Cardinal;

– Функция возвращает число символов в строке Str, не учитывая конечного

нулевого символа.

16.Записи. Записью (тип record) называется набор разнотипных данных. Каждая

запись состоит из полей, а вся структура определяется конструкцией:

type Имя = record

Поле1: Тип1;

Поле2: Тип2;

...

ПолеN: ТипN;

end;

Поля записи ( или объединения) могут быть любого типа, число их не ограничено.

Количество памяти, выделяемой под запись, может быть различным в зависимости

от директивы {$A} (выравнивание). Если установлено {$A+}, то поля выравниваются по

четным адресам – уменьшается время доступа к переменной в памяти. По умолчанию установлено {$A-}. Перед ключевым словом “record” можно добавить слово

Packed”. В этом случае под запись выделяется минимальное

количество байт, причём директива {$A} игнорируется. К полям записи мы можем обращаться при помощи оператора ".":

ИмяПеременной . ИмяПоля

Тип данных запись может иметь вариантную часть. Вариантная часть

позволяет трактовать по-разному занимаемую полями одну и ту же память.

fig - параметр выбора ( его может не быть)

Type

Figure = (Square,Circle,Triangle);

TFigure = Record

x,y : integer;

Case fig : Figure of

Square: (Side: integer);

Triangle: (Side1,Side2,Angle : integer);

Circle: (Radius: integer);

End; Память под вариантную часть выделяется одна и та же. Для Triangle требуется записать три величины типа integer, больше, чем для других фигур. Поэтому под вариантную часть будет выделено 12 байт памяти ( по 4 байта на каждую).

Работа с графикой в Delphi предполагает обращение к канве - свойству Canvas компонентов. Canvas Delphi это холст, который позволяет программисту иметь доступ к каждой своей точке (пикселу).

Метод MoveTo(x,y) – перемещает указатель в пиксель с координатами (x,y)

Метод LineTo(x,y) – рисует линию из текущей точки в точку (x,y) с текущими параметрами ( цвет, толщина, стиль…)

TextOut( x, y, ‘….’) x,y – координаты для вывода текста

17. Указатели. •Переменные могут располагаться в статической или динамической памяти.

• Под статические переменные выделяется определенный объем памяти и связи между

программными элементами устанавливаются на этапе компиляции и компоновки программы.

• Под динамические переменные память выделяется на этапе выполнения программы.

Причем она может освобождаться и выделяться повторно. Это позволяет эффективно ее

использовать.

Карта памяти.

Динамическая память - HEAP (куча)

Оверлейный буфер

Сегмент стека- локальные переменные и параметры

Сегмент данных – глобальные переменные и типизированные константы

Сегмент кода модуля SYSTEM

Сегмент кода последнего модуля программы

Сегмент кода первого модуля программы

Сегмент кода главной программы

Для создания в программе собственных динамических переменных введен в язык

Object Pascal тип указатель. Указателем иногда называют любую динамическую

переменную. Переменная – указатель – это переменная, которая хранит не сами данные, а адрес размещения этих данных. Существуют стандартные указатели Pointer и типизированные указатели. Типизированные указатели содержат в себе информацию о типе хранимых данных. При объявлении типизированного указателя задается базовый тип данных. В этом случае компилятор легко определяет необходимый объем динамической памяти, который требуется выделить данному указателю.

18.Операции с указателями. • К указателям применимы две операции: – “равно”

– “не равно” Возможно присвоение их друг другу, например:

Var P1, P2 : ^double;

P3 : pointer;

Begin

P1 := P2;

P2 := P3; { ошибка, т.к. P2 требует задания базового типа}

P3 := P2; { копирование происходит с потерей базового типа}

End.

Для задания значения указателю можно воспользоваться операцией взятия адреса:

Var P1: ^Integer; D : Integer;

Begin

P1 := @D;

end.

Указателю можно присваивать адрес в статической памяти.

Var P1: ^Integer;

Begin

P1 := nil

end.

Указателю можно присваивать значение nil – пустой адрес. Для проверки значения указателя на равенство nil можно использовать функцию Assigned(<указатель>).

Эта функция возвращает true, если значение указателя не равно nil.

2