Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Указатель [D7, WinXP]


Василий Кузнецов ©   (2007-06-06 23:46:00) 

Здравствуйте, а нельзя как в Си...

var
P : ^integer;
a : array of integer;
b : array of integer;

begin
   SetLength(a, 10);
   SetLength(b, 10);
    P := a;
   ^(P) := 1;
   ^(P+1) := 2;
   P := b;
   //........
end;


такая задумка, в Делфи не моуг перевести.
Спасибо.


SpellCaster   (2007-06-08 19:06:00) [1]

> [11] Германн ©   (07.06.07 16:53)

Млин, сорри - именно это и хотел удалить, но забыл :(
Разумеется,
inc(p);


KSergey   (2007-06-08 08:44:00) [2]

> Василий Кузнецов   (07.06.07 00:09) [2]
> а чтобы на указатель ссылался сначала на один массив а потом
> на другой

А можно узнать зачем это вообще надо? ну т.е. задача-то какая?


Германн   (2007-06-07 16:53:00) [3]


> SpellCaster   (07.06.07 15:08) [10]
>
> inc(p,4);
>

А если хелп почитать?


SpellCaster   (2007-06-07 15:08:00) [4]

> [3] DrPass ©   (07.06.07 00:17)

чтобы уж совсем коротко:
p:=@a;
p^:= 1;
inc(p,4);
p^:= 2;
p:=@b;


begin...end   (2007-06-07 14:35:00) [5]

> DrPass ©   (07.06.07 00:17) [3]

> inc(integer(p), 4)

Inc(p)


Defunct   (2007-06-07 02:18:00) [6]

Василий Кузнецов   (07.06.07 00:09) [2]
Может надо нечтно навроде такого (чуть-чуть ближе к C получится):

const
  WHO_CARES = 1024 * 1024;

type

  PArray = ^TArray;
  TArray = array[0..WHO_CARES] of integer;

var
 P : PArray;
 A : Array[1..20] of integer;
 B : Array[0..10] of integer;

...
begin
 P := PArray( @A[Low(A)] );
 P[0] := 10;
 P[1] := 15;
 ...

 P := PArray( @B[Low(B)] );
 P[0] := 20;
 P[1] := 30;
 ...

end;


Германн   (2007-06-07 01:30:00) [7]


> Я так полагаю перевели физический адрес в байты, добавили
> 4

Имхо, лучше не полагаться на текущий размер типа Integer. Он ведь и изменится может. Такое уже однажды было.


DrPass   (2007-06-07 01:00:00) [8]


> Я так полагаю перевели физический адрес в байты, добавили
> 4

Верно ;)


Василий Кузнецов   (2007-06-07 00:51:00) [9]


> P.S. Вдогонку... как не знающему основ, на всякий случай
> напомню, что в строке inc(integer(p), 4) слово integer не
> имеет никакого отношения к слову integer в строке a : array
> of integer;


Спасибо за ответ

Я так полагаю перевели физический адрес в байты, добавили 4


DrPass   (2007-06-07 00:20:00) [10]

P.S. Вдогонку... как не знающему основ, на всякий случай напомню, что в строке inc(integer(p), 4) слово integer не имеет никакого отношения к слову integer в строке a : array of integer;


DrPass   (2007-06-07 00:17:00) [11]

p:=@a[0];
p^:= 1;
inc(integer(p), 4);
p^:= 2;
p:=@b[0];


Василий Кузнецов   (2007-06-07 00:09:00) [12]


> А ещё тайну приоткрою, в паскале есть три типа циклов...


Спасибо большое - приоткрыли
суть не в том чтобы элементу массива значение присвоить а чтобы на указатель ссылался сначала на один массив а потом на другой


Плохиш   (2007-06-06 23:58:00) [13]

Прикольно, вместо изучения основ, пытаются засандалить какой-то указатель, туда, где он нафик не нужен

a[0] := 1;
a[1] := 2;
и т.д.
аналогично для другого массива

А ещё тайну приоткрою, в паскале есть три типа циклов...


Наверх

Титульная страница Поиск, карта сайта Написать письмо