Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.01;
Скачать: CL | DM;

Вниз

Указатель   Найти похожие ветки 

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

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

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;


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


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

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

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

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


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


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


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


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

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


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

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


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


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


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

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


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


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

Верно ;)


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


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

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


 
Defunct ©   (2007-06-07 02:18) [8]

Василий Кузнецов   (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;


 
begin...end ©   (2007-06-07 14:35) [9]

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

> inc(integer(p), 4)

Inc(p)


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

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

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


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


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

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


 
KSergey ©   (2007-06-08 08:44) [12]

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

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


 
SpellCaster   (2007-06-08 19:06) [13]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.07.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
2-1181068367
DimDim
2007-06-05 22:32
2007.07.01
Программно установить ActiveSheet


15-1180976019
oldman
2007-06-04 20:53
2007.07.01
Объявление. В связи с моей защитой.


2-1181117757
alex810
2007-06-06 12:15
2007.07.01
DBGrid и Мемо поле


2-1180638871
Углук
2007-05-31 23:14
2007.07.01
Компиляция элемента управления.


15-1180624372
Bogdan1024
2007-05-31 19:12
2007.07.01
Диск на 30 дней