Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Вниз

Как упростить конструкцию 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
2-1263888390
lewka
2010-01-19 11:06
2010.03.21
Взоимодействие программы Компас и Delphi


2-1263482392
Sunktor
2010-01-14 18:19
2010.03.21
Как в CodeGear Delphi 2009 запретить показ вкладки Welcome Page


4-1230237557
demon
2008-12-25 23:39
2010.03.21
Всплывающая подсказка


2-1263582604
serhiyiv
2010-01-15 22:10
2010.03.21
TListView и OnCustomDrawItem


3-1236755543
Михаил
2009-03-11 10:12
2010.03.21
Немогу открыть файл mdb в запросе AdoQuery





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский