Форум: "Основная";
Текущий архив: 2002.07.04;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c