Как узнать сабж?
Почемуто у меня длинна всегда равна единице и не зависит от фактической длинны в конструкторе.
А у вас как ? Пожалуйста проверьте:
DELPHI Код:
{запустите в именно паксе! а не в делфи }program tvarTest;
uses SysUtils;
procedure OpenArrayTest(const OpArray: arrayofInteger);
var
i: Integer;
begin
print('Длинна массива : '+intToStr(length(OpArray)));
print('Последний индекс: '+intToStr(High(OpArray)));
for i := Low(OpArray)toHigh(OpArray)dobegin
print('Array ' +IntToStr( i )+' = '+ IntToStr( OpArray[i] ));
end;
end;
begin
OpenArrayTest([11,22,33,44,55,66,77]);
end.
вот что выводит у меня
Код:
Длинна массива : 1 //а должно быть 7
Последний индекс: 0 //а должно быть 6
Array 0 = 11
Добавлено через 52 секунды
Как узнать длинну открытого массива без передачи дополнительных параметров?
__________________
Играю по фэншую используя /allblock, созерцая красоту игрового мира, сосредоточившись на получении энергии Ци при убийстве мобов. icq=((2*3*(19^2)*37)-1)*9
Последний раз редактировалось mikser, 26.07.2012 в 15:30.
Причина: Добавлено сообщение
Да, Открытые массивы Zero-Based с этим ни кто и ни спорит.
Цитата:
массив содержит один элемент
Нет, массив содержит 7 элементов. [11,22,33,44,55,66,77]
Цитата:
а не верно ли?
Нет не верно
я передал в процеду массв из 7 элементов [11,22,33,44,55,66,77]
а внутри процедуры оказывается его длинна равна 1 (WTF)
Я попросил проверить у вас так же?
__________________
Играю по фэншую используя /allblock, созерцая красоту игрового мира, сосредоточившись на получении энергии Ци при убийстве мобов. icq=((2*3*(19^2)*37)-1)*9
Последний раз редактировалось mikser, 26.07.2012 в 15:32.
ааа... не туда посмотрел туплю на старости лет... значит передаешь неверно. чтобы удостоверится попробуй так:
PHP код:
begin OpenArrayTest([11,22,33,44,55,66,77]); print('Array 2 = '+ IntToStr( OpArray[2] ) ); должно по идее показать 33 end.
в случае вылета, скажет оут оф бондс или как там... значит передаешь все-таки не верно, если покажет... эээ... ну думаю оно не покажет
и еще момент! у меня в пьюр бейсике для организации массива сначала требуется указать его размер. типа Dim Array(10), а уже после этого забивать данные. нет ли чего подобного в твоем языке?
SeregaZ,
1. покажет 33.
2. есть array[0..10] of тип.
а как насчет ответа на сабжевый вопрос?
__________________
Играю по фэншую используя /allblock, созерцая красоту игрового мира, сосредоточившись на получении энергии Ци при убийстве мобов. icq=((2*3*(19^2)*37)-1)*9
for i := Low(OpArray) to Len-1 do
begin
print('Array ' +IntToStr( i )+' = '+ IntToStr( OpArray[i] ) );
end;
end;
begin
OpenArrayTest([11,22,33,44,55,66,77]);
end.
SizeOf(OpArray)=4
видимо это указатель
Добавлено через 28 минут
Уря победил!!!
Помогло старое-доброе насилие - преобразование типов
обявляем какойнить тип вроде MyType=array of Integer;
что по существу есть описание динамического массива
а потом преобразуем нашь массив к нему MyType(mass)
Но полученый код будет работать только с массивом из целых чисел
Потому было принято решение юазть Array of Const для универсальности
Вот рабочий код:
DELPHI Код:
{запустите в именно паксе! а не в делфи }program tvarTest;
uses SysUtils;
type TDAoC=arrayofconst;
procedure OpenArrayTest(const OpArray: arrayofInteger);
var
i: Integer;
begin
print('Длинна массива : '+intToStr(length(TDAoC(opArray))));
print('Последний индекс: '+intToStr(High(TDAoC(opArray))));
for i := Low(TDAoC(opArray))toHigh(TDAoC(opArray))dobegin
print('Array ' +IntToStr( i )+' = '+ IntToStr( OpArray[i] ));
end;
end;
begin
OpenArrayTest([11,22,33,44,55,66,77]);
end.
__________________
Играю по фэншую используя /allblock, созерцая красоту игрового мира, сосредоточившись на получении энергии Ци при убийстве мобов. icq=((2*3*(19^2)*37)-1)*9
Последний раз редактировалось mikser, 26.07.2012 в 18:33.
Причина: Добавлено сообщение