Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 17:58   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Значение через указатель.

Код:
Procedure MyProc(RM, Pal : Pointer)
Вызываю:
Код:
MyProc(@RealMatrix, @PalletteMap);
Где
Код:
RealMatrix:Array[0..87499] of Integer;
PalletteMap : Array[0..127] of Integer;
Как мне брать значения из массивов в MyProc?

P.S. Мне вообще кажется, что я бредятину написал .
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 23.01.2010, 19:21   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
Procedure MyProc(RM, Pal : Pointer);
...
var prm, ppal: PInteger;
var i: Integer;

prm := rm;
ppal := pal;

for i:= 0 to 87499 do
begin
  // prm^ - value of i (index)
  Inc(prm);
end;
ну так для понимания.... ничего сложного вообще

[Любите вы, уважаемый, окончания слов "съедать"]

Последний раз редактировалось mihali4; 23.01.2010 в 20:00.
BOBAH13 вне форума Ответить с цитированием
Старый 23.01.2010, 19:25   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Можно же в параметрах объявлять и передавать динамические массивы.
Код:
Procedure MyProc(RM, Pal : array of integer);
var I : Integer;
begin
   for I := 0 to High(RM) do
    ...
end;
...
  MyProc(RealMatrix, PalletteMap);

Последний раз редактировалось Скандербег; 23.01.2010 в 19:29.
Скандербег вне форума Ответить с цитированием
Старый 23.01.2010, 19:45   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
for i:= 0 to 87499 do
begin
  // prm^ - value of i (index)
  Inc(prm);
end;
А здесь надо прибавлять только один байт к адресу или 4 (SizeOf(Integer)=4)?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 23.01.2010, 20:45   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Inc - почитайте что делает функция. Ей передается типа PInteger - и вот подумайте, это указатель (адрес) в 32х системе, на сколько будет увеличен prm в байтах ? Тяжелый вопрос
BOBAH13 вне форума Ответить с цитированием
Старый 24.01.2010, 09:12   #6
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Код:
Procedure MyProc(RM, Pal : Pointer)
Вызываю:
Код:
MyProc(@RealMatrix, @PalletteMap);
Где
Код:
RealMatrix:Array[0..87499] of Integer;
PalletteMap : Array[0..127] of Integer;
Как мне брать значения из массивов в MyProc?
Объяви два типа
Код:
type
  PIntArray = ^TIntArray;
  TIntArray = array[ 0..( MaxInt div SizeOf( Integer ) ) - 1 ] of Integer;
И либо подправь объявление твоей процедуры на procedure MyProc(RM, Pal : PIntArray), либо обращайся в ней к элементам массива таким образом:
PIntArray(RM)^[ Index ]
PIntArray(Pal)^[ Index ]
maxionans вне форума Ответить с цитированием
Старый 24.01.2010, 11:04   #7
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

а зачем указатели? разве так не проще:
Код:
type
 TRM=Array[0..87499] of integer;
 TPal=Array[0..127] of integer;      
...
Procedure MyProc(RM: TRM; Pal : TPAL);
begin
 showmessage(inttostr(RM[0]));
 showmessage(inttostr(Pal[2]));
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
 RealMatrix:Array[0..87499] of Integer;
 PalletteMap : Array[0..127] of Integer;
begin
 RealMatrix[0]:=444;
 PalletteMap[2]:=555;
 MyProc(realmatrix,pallettemap);
end; 
...
Или если массивы с непостоянным размером, то:
Код:
type
 TRM=Array of integer;
 TPal=Array of integer;
или ещё проще:
Код:
Procedure MyProc(RM,Pal : Array of integer);
begin
 showmessage(inttostr(RM[0]));
 showmessage(inttostr(Pal[2]));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 RealMatrix:Array[0..87499] of Integer;
 PalletteMap : Array[0..127] of Integer;
begin
 RealMatrix[0]:=444;
 PalletteMap[2]:=555;
 MyProc(realmatrix,pallettemap);
end;
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 24.01.2010, 11:10   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
а зачем указатели?
Слишком большое значение через стек гонять грешно.

Все, всех благодарю...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 24.01.2010, 18:15   #9
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

В случае передачи параметров по ссылке, значения параметров, в т.ч. и массивов, в процедурный стек не копируются. Можно обойтись и без явного использования старомодных указателей - все равно в этом случае параметры и есть указатели на массивы.
Код:
Procedure MyProc(var RM, Pal : array of integer);
Скандербег вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выводит значение через итератор kedbl4 Общие вопросы C/C++ 1 07.12.2009 21:56
Обращение к элементам массива через указатель в С++ серг Помощь студентам 1 24.11.2009 01:30
Запуск процедуры через указатель. Alex Cones Общие вопросы Delphi 4 16.11.2009 11:39
Работа с TStringList через указатель. Mixasik Общие вопросы Delphi 2 08.01.2009 12:51
указатель мыши автоматически должен совершать клик по заданному месту на экране, через промежуток времени Deefrost Qt и кроссплатформенное программирование С/С++ 5 16.05.2008 20:25