![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
i1, i2, i3 и т.д. [D5, Win95/98, WinME, NT4, Win2k, WinXP]
Елена © (2002-02-04 11:12:00)У меня имеется множество переменных вида i1, i2, i3 и т.д.
Как мне в цикле присвоить им определенные значения?
Заранее благодарна.
Алексей Петров (2002-02-04 14:13:00) [1]> Digitman © (04.02.02 13:47)
Против того, что это решает поставленную задачу я и не возражал, но ... :)
Alx2 (2002-02-04 13:48:00) [2]Гора к Магомету не пошла :) Вот, в качестве стеба:
var i_p : array [1..3] of ^integer;
begin
i_p[1]:=@i1;
i_p[2]:=@i2;
i_p[3]:=@i3;
for k := 1 to 3 do i_p[k]^ := k;
end;
Digitman (2002-02-04 13:47:00) [3]>Алексей Петров
Каков вопрос - таков ответ) решение-то существует, согласись ? Пусть даже и ненадежное ... вопросы надежности - уже на совести автора)
Алексей Петров (2002-02-04 13:33:00) [4]А что от !в комментариях код станет надежнее? :)
Где гарантии, что оптимизатор не выкинет, например, i2 как не нужную? Текущие версии выкидывают либо весь блок либо оставляют весь - но это особенность реализации и нет никаких гарантий, что работать будет в D7 например.
И нет гарантий, что в будующем компиляторе не поменяют их порядок в стеке.
Причем никаких предупреждений при компиляции не будет.
Этот код работоспособен, но не надежен. Такими приемами пользоваться, ИМХО, крайне не желательно.
Digitman (2002-02-04 13:26:00) [5]
var
i1, i2, i3: Integer; //блок смежных (!) однотипных (!)деклараций переменных (статических либо динамических)
i: Integer;
p: PInteger;
...
p:= @i1;
for i:= 1 to 3 do begin
p^:= Integer-значение;
Inc(p);
end;
Алексей Петров (2002-02-04 13:25:00) [6]> Digitman © (04.02.02 13:18)
Работать будет, но шаг вправо, шаг влево - расстрел на месте Access Violation-ом :)
Digitman (2002-02-04 13:18:00) [7]
var
i1, i2, i3: Integer; //блок смежных однотипных деклараций
i: Integer;
p: PInteger;
...
p:= @i1;
for i:= 1 to 3 do begin
p^:= ...
Inc(p);
end;
Виктор Щербаков (2002-02-04 11:35:00) [8]Елена (04.02.02 11:23)
Издеваешься? :)
Для доступа к переменной по её номеру (это называется индекс), используются массивы.
Если для переменных i1, i2, i3... планировался доступ по индексу, нужно было объявить массив:
var i: array[1..3] of SomeType;
drpass (2002-02-04 11:32:00) [9]Никак. Конечно, можно поиздеваться с указателями... но это может не получиться. Используй массив
Елена (2002-02-04 11:23:00) [10]Нет, мне с i1, i2, i3 и т.д., пожалуйста :)
Виктор Щербаков (2002-02-04 11:17:00) [11]Для этих целей и нужны массивы
...
var a: array[1..3] of Integer;
i: Integer;
begin
for i := 1 to 3 do
a[i] := SomeValue //нужное значение
end;