Главная страница
    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
3-9731
skysat
2002-06-11 02:38
2002.07.04
Help


1-9869
HitMan
2002-06-20 19:32
2002.07.04
Опять про StringGrid. Цвет и шрифт....


7-10021
SerVS - S
2002-04-05 16:43
2002.07.04
Код выхода из программы


14-9978
Katja
2002-06-02 08:57
2002.07.04
Hook


14-9969
Igorek
2002-06-02 00:36
2002.07.04
Визуальное проектирование ?





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