Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.21;
Скачать: CL | DM;

Вниз

Как упростить конструкцию Smallint(Pointer(@apeaks[i, 0])^) ?   Найти похожие ветки 

 
Dr.Andrew   (2009-05-31 13:24) [0]

Добрый день!

Как можно упростить данный код (конструкции типа Smallint(Pointer(@apeaks[i, 0])^)  и PSmallInt(@apeaks[i, 1])^) без изменения объявления глобальных переменных (массава apeaks : array of array of ^SmallInt)? И, пожалуйста объясните смысл этих конструкций (Smallint(Pointer(@apeaks[i, 0])^)  и PSmallInt(@apeaks[i, 1])^).

procedure TForm1.Button1Click(Sender: TObject);
     var i : Integer;
begin
 Memo1.Lines.Clear;
 SetLength(apeaks, 0, 0);
 for i := 0 to 9 do
 begin
   SetLength(apeaks, i+1, 2);
   Smallint(Pointer(@apeaks[i, 0])^) := i - RandomRange(0, 32768);
   Smallint(Pointer(@apeaks[i, 1])^) := i - RandomRange(0, 32768);
   Memo1.Lines.Add(Format("%d. %d : %d; %d : %d", [i, b, c, SmallInt(Pointer(@apeaks[i, 0])^), PSmallInt(@apeaks[i, 1])^]));
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
     var i : Integer;
begin
 Memo2.Lines.Clear;
 for i := 0 to High(apeaks) do
 begin
   Memo2.Lines.Add(Format("%d. %d : %d", [i, SmallInt(Pointer(@apeaks[i, 0])^), SmallInt(@(apeaks[i, 1])^)])); //PSmallInt(@apeaks[i, 1])^]));
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Memo1.Lines.Clear;
 Memo2.Lines.Clear;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 SetLength(apeaks, 0, 0);
end;


Спасибо!


 
Dr.Andrew   (2009-05-31 13:28) [1]

Небольшое дополнение к предыдущему коду:

вначале кода нужно добавить:

var
 Form1: TForm1;
 apeaks : array of array of ^SmallInt;

implementation

uses Math;

{$R *.dfm}


Спасибо!


 
Dr.Andrew   (2009-05-31 13:28) [2]

Удалено модератором


 
Palladin ©   (2009-05-31 16:45) [3]

Изучай тему типизированных и нетипизированных указателей.


 
Palladin ©   (2009-05-31 16:45) [4]

И вообще - указателей, тоже.


 
sniknik ©   (2009-05-31 17:21) [5]

он не использует тут указатели... все что тут с ними связано это только видимость, он просто в переменную указателя пишет значение смолинта... такой своеобразный самообман. но собственно указателей, и работы с ними нет.

сделать так
apeaks : array of array of integer;

и так
apeaks[i, 0]:= Smallint(i - RandomRange(0, 32768));
и будет то же самое. (по структуре/значениям в массиве)
(приведение к смолинт тут только для "обрезки" старших байт, т.к. вычисляемое значение, вычисляется "криво" и может переваливать за значение смолинта. да и вообще все тут криво, зачем то установка размера массива на каждую итерацию, и тип в массиве заведомо больший чем предполагается хранить, жуткие присвоения через несколько приведений типа... похоже все специально чтобы запутать читающего код. больше в них смысла нет)


 
sniknik ©   (2009-05-31 17:22) [6]

хотя, конечно, если тема курсовой "указатели" и он думает, что так он с ними работает, то непременно надо изучать.


 
Dr.Andrew   (2009-05-31 18:43) [7]

Всем спасибо за помощь.


 
Дмитрий Белькевич   (2009-06-01 00:23) [8]

Неясна логика программы. Зачем в ней вообще какие-то указатели? Почему просто не массивами SmallInt обойтись?



Страницы: 1 вся ветка

Текущий архив: 2010.03.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
15-1262441446
AlexDan
2010-01-02 17:10
2010.03.21
реклама от гугла..


15-1262449871
NailMan
2010-01-02 19:31
2010.03.21
Как сделать залипающий курсор мышки у края десктопа


6-1214573401
Галинка
2008-06-27 17:30
2010.03.21
как передать строку в сокет?


2-1263805978
NBAH1990
2010-01-18 12:12
2010.03.21
как найти какой области принадлежит значение?


15-1261943074
Kerk
2009-12-27 22:44
2010.03.21
Отправьте СМС на номер 1234 и получите 100 рублей на счет