Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-10062
Andrey-k
2002-04-28 23:02
2002.07.04
DLL, 2 потока и List


14-9965
Феликс
2002-06-02 19:28
2002.07.04
Новые смайлики


4-10059
Бивис
2002-05-07 20:16
2002.07.04
sYSTEM TrAy


3-9729
voland_s
2002-06-10 15:14
2002.07.04
SQL временные таблички


1-9880
garry
2002-06-20 09:31
2002.07.04
Word.application и окно программы которое не хочет быть сверху!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский