|
|
|
| Пытаюсь передать указатель на массив (да хоть просто массив) в процедуру на этом недоязыке
{ ... }
const
N = 20;
type
a = array[1..N] of integer;
var
i : integer;
arr : a;
procedure arr_dump (var arr : array of integer);
var i : integer;
begin
for i := 0 to N - 1 do { Attention!!! 0 .. N - 1 }
begin
if i > 0 then write(', ');
write(arr[i]);
end;
end;
begin
for i := 1 to N do arr[i] := i;
writeln('w/o procedure');
for i := 1 to N do { Attention!!! 1 .. N }
begin
if i > 1 then write(', ');
write(arr[i]);
end;
writeln();
writeln('arr_dump()');
arr_dump(arr);
readln();
end .
|
Когда решил выводить содержимое массива через процедуру, то стал натыкаться на run-time error 201 (Range check error).
С помощью некоторых исследований я обнаружил, что массив в процедуре уже имеет индексы от 0 до 19-ти, а до этого было от 1 до 20.
Что за?!
P.S. У меня Free Pascal | |
|
|
|
|
|
|
|
для: BinLaden
(12.10.2008 в 00:42)
| | почему бы и нет?
Тип-то поменялся.
Если бы написали procedure arr_dump (var arr : a); то получили бы свои от 1 по N... наверняка. | |
|
|
|
|
|
|
|
для: Trianon
(12.10.2008 в 10:18)
| | Вот зачем вообще нужно указывать тип, если это указатель? | |
|
|
|
|
|
|
|
для: BinLaden
(12.10.2008 в 10:58)
| | потому что pascal - типизированный язык. Соответственно, и указатели типизированные.
Просто типизация статическая, а не времени выполнения. | |
|
|
|
|
|
|
|
для: Trianon
(12.10.2008 в 11:03)
| | Это действительно так. | |
|
|
|