Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.18;
Скачать: [xml.tar.bz2];




Вниз

i1, i2, i3 и т.д. 


Елена   (2002-02-04 11:12) [0]

У меня имеется множество переменных вида i1, i2, i3 и т.д.
Как мне в цикле присвоить им определенные значения?
Заранее благодарна.



Виктор Щербаков   (2002-02-04 11:17) [1]

Для этих целей и нужны массивы
...
var a: array[1..3] of Integer;
i: Integer;
begin
for i := 1 to 3 do
a[i] := SomeValue //нужное значение
end;



Елена   (2002-02-04 11:23) [2]

Нет, мне с i1, i2, i3 и т.д., пожалуйста :)



drpass   (2002-02-04 11:32) [3]

Никак. Конечно, можно поиздеваться с указателями... но это может не получиться. Используй массив



Виктор Щербаков   (2002-02-04 11:35) [4]

Елена (04.02.02 11:23)
Издеваешься? :)
Для доступа к переменной по её номеру (это называется индекс), используются массивы.
Если для переменных i1, i2, i3... планировался доступ по индексу, нужно было объявить массив:
var i: array[1..3] of SomeType;



Digitman   (2002-02-04 13:18) [5]


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 13:25) [6]

> Digitman © (04.02.02 13:18)
Работать будет, но шаг вправо, шаг влево - расстрел на месте Access Violation-ом :)



Digitman   (2002-02-04 13:26) [7]


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:33) [8]

А что от ! в комментариях код станет надежнее? :)

Где гарантии, что оптимизатор не выкинет, например, i2 как не нужную? Текущие версии выкидывают либо весь блок либо оставляют весь - но это особенность реализации и нет никаких гарантий, что работать будет в D7 например.

И нет гарантий, что в будующем компиляторе не поменяют их порядок в стеке.

Причем никаких предупреждений при компиляции не будет.

Этот код работоспособен, но не надежен. Такими приемами пользоваться, ИМХО, крайне не желательно.



Digitman   (2002-02-04 13:47) [9]

>Алексей Петров
Каков вопрос - таков ответ) решение-то существует, согласись ? Пусть даже и ненадежное ... вопросы надежности - уже на совести автора)



Alx2   (2002-02-04 13:48) [10]

Гора к Магомету не пошла :) Вот, в качестве стеба:
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;



Алексей Петров   (2002-02-04 14:13) [11]

> Digitman © (04.02.02 13:47)
Против того, что это решает поставленную задачу я и не возражал, но ... :)




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.028 c
3-57010           olden                 2002-01-22 18:10  2002.02.18  
то ли ADO глючит, то ли...


1-57138           KvORubin              2002-02-03 18:39  2002.02.18  
Файл.ТХТ Помогите ПОЖАЛУЙСТО !!!


3-56985           derr                  2002-01-04 12:33  2002.02.18  
Как сосдать DBF таблицуказав для поля кол-во знаков после


14-57222          ллл                   2001-12-20 00:08  2002.02.18  
Индексация


1-57062           nikols                2002-02-01 16:34  2002.02.18  
Какой тип у редактора свойства Expression компонента TQRExpr?