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

Вниз

Pointer   Найти похожие ветки 

 
nimble ©   (2002-06-24 06:30) [0]

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


 
MBo ©   (2002-06-24 06:47) [1]

переменная типа динамический массив как раз и есть указатель на первый (с нулевым индексом) элемент.

вот один из методов доступа

procedure TForm1.Button1Click(Sender: TObject);
type aint=array of integer;
var a:array of integer;
p:pointer;
i:integer;
begin
setlength(a,5);
p:=@a[0];// у тебя, очевидно, указатель каким-то другим способом получен
// или просто p:=a;
for i:=0 to high(aint(p)) do
aint(p)[i]:=i;
caption:=inttostr(aint(p)[2]);
end;


 
MBo ©   (2002-06-24 06:48) [2]

можно и так

p:=a;

a:=p;

for i:=0 to high(a) do ...


 
nimble ©   (2002-06-24 07:06) [3]

Скорее всего вопрос посавил не точно! Вот смотри у меня есть такая запись:
main = record
...
...
w = array of record
a: integer;
b: float;
end;
p_w: PChar; // типа указатель на массив W
...
...
ww = array of record
a: integer;
b: float;
s: String;
...
end;
p_ww: PChar; // типа указатель на массив Ww
А дальше, когда заполняю записи и массивы пишу -
p_w:=@Mas[i].w;
...
p_ww:=@Mas[i].ww;
mas - это динамический масив состоящий из main record;

Если есть идеи, то поделись плииииз!!!!


 
MBo ©   (2002-06-24 07:22) [4]

ничего не понял, приведи полное объявление типов и переменных


 
nimble ©   (2002-06-24 07:31) [5]

Мыло есть?


 
MBo ©   (2002-06-24 07:32) [6]

здесь пиши, может еще кто разберется


 
nimble ©   (2002-06-24 07:58) [7]

С самого начала! Есть два динамических массива, которые представляют собой следующую запись:
main = record
i: integer;
s: string;
f: Float;
...
mas1 = array of record;
i1: integer;
f1: float
end;
mas2 = array of record
i2: integer;
f2: float;
s2: string;
end;
и еще 3 таких же массива похожей конструкции.
end;

Далее в var

BufArray: array of main;
SQLArray,TXTArray: BufArray;

Первый массив черпает данные из базы, второй из текстовиков.
Задача: нужно сравнить эти дав массива (SQLArray,TXTArray) и разницу куда-нибудь вывести.
А дальше пошел тупняк.
Имеется процедурка->
procedure CheckArrays(SQL,TXT: BufArray; PosInSQL,PosInTXT: Integer; Param: byte);
begin
if param =1 then
сравниваем mas 1;
if param = 2 then
сравниваем mas 2;
И так далее...
end;

Работать работает, но все это примитивно! Вот и подумалось про указатели. Структура внутренних массивов примерно одинаковая, может чего и вышло бы :(



 
msts   (2002-06-24 09:38) [8]

Использование поинтеров:
INC(A,20) - переместить указатель A на 20 "размеров указателя" - "вперед".

DEC(A,20) - переместить указатель A на 20 "размеров указателя" - "назад".

INC(A) равноценен INC(A,1)
DEC(A) равноценен DEC(A,1)

"размер указателя" - это сколько байтов памяти занимает переменная указанного типа (на которую указывает указатель :) ) - соответственно на сколько минимум он будет перемещен
в данном случае SizeOf(main)

не помню на сколько будет перемещатся Pointer, проверь

пример :

TOne = record
item : integer
end;

POne = ^TOne; указатель на TOne

a : array of TOne;
p : POne;

p1 : POne absolute a; указывает на первый элемент масива "сразу"
неуверен будет ли работать с динамичесим массивом



p:=@a

p - указывает на первый эл.
inc(P)
p - указывает на второй эл.


















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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
14-9989
hooch
2002-06-04 06:33
2002.07.04
Таймер


1-9829
Геннадий Милехин
2002-06-24 17:59
2002.07.04
Как подключить Help по F1 для RXLIB 2.75


3-9724
Виталий Панасенко
2002-06-11 08:47
2002.07.04
UPDATE дной таблице по друго с использованием SQL


1-9790
tsarevep
2002-06-23 00:17
2002.07.04
PageControl


14-10011
Sniffer
2002-06-02 13:09
2002.07.04
Ура! Вчера Мастаки собрались в Киеве!