рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Преобразование строк

Преобразование строк - раздел Образование, Работа с массивами динамические массивы Допустим, Что У Тебя Есть Строка Типа String И Ты Хочешь Её Преобразов...

Допустим, что у тебя есть строка типа String и ты хочешь её преобразовать в PChar. Для такого преобразования нужно написать требуемый тебе тип и в скобках указать свою строковую переменную: NewStr:=PChar(MyStr);. В этом примере переменная MuStr имеет тип String, а мы приводим её в вид PChar. Вот так происходит преобразования совместимых типов.

Вот такое преобразование строк мы будем делать очень часто при вызове WinAPI функций, потому что там большинство строк имеет именно PChar тип.

Сейчас я не могу придумать какой-нибудь ещё пример преобразования, но уже в этой главе ты воспользуешься такой возможностью в одном из моих примеров.

 

10.7 Указатели

 

ора познакомиться с указателями. Это очень удобная и сильная вещь, которой мы так же будем часто пользоваться. Уже в этой главе мы будем работать с указателями на структуры, которые расположим в динамической

памяти.

Но прежде чем что-то объяснять, я хочу показать тебе, зачем нужны указатели. Давай вспомним про процедуры, и я расскажу тебе, как происходит их вызов. Допустим, у тебя есть процедура с именем MyProc у которой есть два параметра: число и строка. Как происходит вызов такой процедуры, и как ей передаются эти параметры? Очень просто. Сначала параметры поднимаются в стек (напомню, что стек – это область памяти для хранения твоих временных/локальных переменных). Сначала заносится первый параметр, затем второй и после этого вызывается процедура. Прежде чем процедура начнёт своё выполнение, она достаёт эти параметры из стека в обратном порядке.

Теперь вспомним о наших параметрах. Первый – это число, которое будет занимать два байта. Когда мы подымем его в стек, то оно займёт там свои положенные два байта. Второй параметр – строка. Каждый символ строки – это отдельный байт. Допустим, что наша строка состоит из 10 символов, значит для передачи такой строки в процедуру, в стеке понадобиться 10 байт плюс один байт для указания конца строки или размерности (это зависит от типа строки). Всего для передачи в процедуру нам понадобиться в стеке как минимум 12 байт. Это не так уж и много, поэтому такое можно себе позволить.

А теперь представь, что строка, которую надо передать в процедуру, состоит из 1000 символов. Вот тут нам понадобиться в стеке уже около килобайта. При нынешних размерах памяти на это уже никто не обращает внимания, но народ забывает про то, что такая строка сначала копируется в память стека, а потом достаётся оттудова. Такое копирование большого размера памяти отнимает достаточно много времени и твоя программа тратит лишнее время на бессмысленное копирование большой строки.

Выход из сложившейся ситуации достаточно прост – можно не передавать строку, а только передать указатель на область памяти, где находиться эта строка. Любой указатель занимает всего четыре байта, а это уже существенная экономия. Мы просто передаём два байта указывающих на длинную строку, а процедура достаёт эти два байта и уже знает, где можно взять строку, когда она понадобиться.

Указатель в Delphi объявляется как Pointer. Например, давай объявим переменную p типа указатель:

– Конец работы –

Эта тема принадлежит разделу:

Работа с массивами динамические массивы

Глава Основные при мы кодинга...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Преобразование строк

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

For i:=0 to High(r)-1 do begin
r[i]:=i*i; ListBox1.Items.Add(IntToStr(i)+' в квадрате ='+IntToStr(r[i])); end; В области объявлений VAR я объявил две перем

For i:=0 to High(r)-1 do
r[i]:=i*i; SetLength(r,20); for i:=10 to High(r)-1 do r[i]:=i*i; for i:=0 to High(r) do ListBox1.Items.Add(IntToStr(i)+' в квадрате ='+In

Var f:TStringList; //Переменная типа объект TStringList.
begin f:= TStringList.Create(); f.Free; end; В этом примере я только создал новый объект и сразу уничтожил, не используя его. Давай снов

Var f:TStrings; //Переменная типа объект TStringList.
begin f:= TStringList.Create(); f.Free; end; В этом примере я объявил переменную типа TStrings, но при создании проинициализировал её объе

F.Add(‘Прощай’);// Добавляю новую строку
f.SaveToFile(‘c:filename.txt’); // Сохраняю результат f.Free; end; На всякий случай, прежде чем изменить пятую строку я проверяю, есть ли в файле эти пять строк. Ес

Преобразование целых чисел в строку и обратно
Начну я с рассмотрения специальных функций для преобразования несовместимых типов. Самое частое, что может тебе понадобиться – преобразование строк в число и обратно. Допустим, что тебе нужно напис

Begin ch:=StrToInt(Edit1.Text); // Преобразовываю Edit1.Text в число ch:=ch+1; Edit1.Text:=IntToStr(ch); // Преобразовываю сh в строку
end; Когда ты преобразовываешь строку в число, ты должен быть уверен в том, что строка содержит число. Если в строке будет хоть один символ не относящейся к цифре, то во в

Преобразование даты в строку и обратно
Теперь познакомимся с преобразованием даты. Для этого есть несколько функций: 1. 1. DateToStr – преобразовывает дату в строку. Единственный параметр, который надо указать – переменн

Преобразование вещественных чисел
Теперь перейдём к числам с плавающей точкой. Когда ты строишь математику в своей программе, то можешь столкнуться с вещественными числами. Например, если у тебя есть какая-то формула, в которой исп

Var p:Pointer
Для того, чтобы получить адрес переменной или объекта, необходимо перед его именем поставить знак @. Например, у тебя есть строка Str и чтобы присвоить её а

Var p:Pointer
Для того, чтобы получить адрес переменной или объекта, необходимо перед его именем поставить знак @. Например, у тебя есть строка Str и чтобы присвоить её а

Var p:Pointer
Для того, чтобы получить адрес переменной или объекта, необходимо перед его именем поставить знак @. Например, у тебя есть строка Str и чтобы присвоить её а

Begin ws:=New(PWindowSize); // Выделяем память ws.Left:=10; // Изменяем одно свойство Dispose(ws); // Уничтожаем память
end; В этом примере я объявил переменную ws типа PWindowsSize. Это значит, что ws – это всего лишь указатель и в самом начале он нулевой. Теперь нам н

Закрываем поиск
FindClose(SearchRec); end; На компакт диске, в директорииПримерыГлава 10FindF

If WindowState=wsNormal then
begin FIniFile.WriteInteger('Option', 'Width', Width); FIniFile.WriteInteger('Option', 'Heigth', Height); FIniFile.WriteInteger('Option', 'Left', Left); FIniFile.WriteIn

Procedure TForm1.LoadProgParam; var
FIniFile: TRegIniFile; begin FIniFile := TRegIniFile.Create('Software'); FIniFile.OpenKey('VR',true); FIniFile.OpenKey('VR-Online',true);

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги