![]() |
|
|
Регистрация | << Правила форума >> | 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 есть условное описание, тоже иногда очень удобно. Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#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] // значение последнего байта и т.п ... Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#9
|
||||
|
||||
![]() Всем ещё раз спасибо за разяснение
![]() Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей ![]() |