![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Объясните пожалуйста какая разницу между обьявлением переменных в месте_1 и месте_2 ?
Код:
Type
TMyTyps = record
integ : integer; // место_1
Move : boolean; // место_1
end;
Procedure proc1;
Procedure proc2;
Procedure proc3;
var
variable: array[1..50] of TMyTyps; // место_2
var1 : integer; // место_2
implementation . ![]() |
|
#2
|
||||
|
||||
|
TMyTyps - это запись - позволяет собрать в кучу несколько переменных, напр чтобы передавать в параметрах фукции и т.п
Ещё в record есть условное описание, тоже иногда очень удобно. |
|
#3
|
||||
|
||||
|
Код:
Type
TMyTyps = record
integ : integer; // место_1
Move : boolean; // место_1
end;Т.е. эта переменная будет внутри типа. Пример: Код:
var MT:TMyTyps; begin mt.integ:=0; mt.move:=true; А второй пример: Код:
Procedure proc1; Procedure proc2; Procedure proc3; var variable: array[1..50] of TMyTyps; // место_2 var1 : integer; // место_2 implementation Пример: Код:
procedure TForm1.OnClick(Sender:TObject); begin var1:=0;// или variable[0].integ:=0; variable[0].move:=true; end; |
|
#4
|
||||
|
||||
|
Спасибо всем, стало немного понятнее
![]() |
|
#5
|
||||
|
||||
|
Цитата:
|
|
#6
|
||||
|
||||
|
Начнем с того что переменная это поименованная область памяти (не будем вдаваться в подробности длинны этой области, и ее видимости из других форм/юнитов/библиотек).
Код:
var a:integer; b:char; Код:
Type
TMyTyps = record
integ : integer;
Move : boolean;
end;Код:
var
somevar:TMyTyps; |
|
#7
|
||||
|
||||
|
Цитата:
|
|
#8
|
||||
|
||||
|
Насчёт памяти:
Внутри записи допустимо указывать несколько форм её представления, и описываются все эти формы "в стиле" оператора case (это только правило описания, способ нужного представления, понятный компилятору и разработчику, а не реальный машинный код). Например программисту требуется использовать два типа данных: одну запись с полями: Код:
Name : string[50]; Num: integer; X:integer; Код:
a: integer; b: char; X:integer; Код:
type TMyType = record
X:integer;
case boolean of
true: (Name: string[50]; Num: integer);
false: (a: integer; b: char);
end; )Далее в круглых скобках приводятся варианты внутренней структуры. Закрывает описание case не собственное ключевое слово end, а слово end, завершающее описание всей записи Обращатся к полям записи в тексте программы можно как обычно. Данное описание используется ещё с первых версий программы для экономии памяти, т.к для всех представлений выделяется одна общая область памати (равная облатси памяти, требуемой для самого большого представления) Конечно, одновременно обращатся к полям из разных описаний не следует: ведь создаются подобные раздельные описания как раз исходя из того, что совместно использоваться они не будут. Но есть ещё один способ применения условного описания. Т.к в памати для представлений отводиться одна общяя область, то можно например орагизовать доступ к отдельным байтам переменной, напр. Integer имеет длину 4 байта, тогда: Код:
type TMyType = record
case byte of
1: (I:integer);
2: (bs: array [1..SizeOf(integer)] of byte);
end;
var A:TMyType;
begin
A.I := '1568237'; // число типа integer
A.bs[1] // значения первого байта
A.bs[4] // значение последнего байта и т.п
... |
|
#9
|
||||
|
||||
|
Всем ещё раз спасибо за разяснение
![]() |