![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Указатель [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;
и т.д.
аналогично для другого массива
А ещё тайну приоткрою, в паскале есть три типа циклов...