![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
код по последовательному поиску имени в массиве элементов
Sonia © (2008-02-22 10:55:00)Всем привет!!! Извиняюсь за дурацкий вопрос, тока не посылайте, пожалуйста, никуда :(.
Вот представлен код по последовательному поиску имени в массиве элементов:
function SeqSearch(aStrs:PStringArray; aCount: integer; const aname:string) : integer;
var i:integer;
begin
for i:=0 to Pred(aCount) do
if CompareText(aStrs^[i], aname)=0 then begin
Result:=i;
Exit;
end;
Result:= -1;
end;
И вот у меня такой вопрос: что означает aStrs^[i] в функции CompareText. Почему нельзя было просто aStrs[i] сделать??
PS вопрос дурацкий, не убивайте, плиз...
Sapersky (2008-02-22 18:22:00) [1]Есть подозрение, что PStringArray определён как:
PStringArray = ^TStringArray;
TStringArray = array [0..0] of String;
(обычно с P начинаются имена типов-указателей).
В этом случае Low, High для PStringArray вообще не имеют смысла - это не массив, это типизированный указатель. Базовый тип TStringArray теоретически может начинаться не с нуля, но это редкое (во всех смыслах) извращение. Если так уж хочется учесть все-все случаи, можно написать:
For n := Low(aStrs^) to Low(aStrs^) + aCount-1 do
Использовать High совершенно точно не стоит, т.к. работаем с указателем, сколько там памяти выделено на самом деле - определяется параметром aCount (в данном случае), а вовсе не размерностью базового типа, которая в принципе может быть любой.
Amoeba (2008-02-22 15:26:00) [2]
> Dmitry S © (22.02.08 14:15) [13]
>
>
> > Johnmen © (22.02.08 12:05) [11]
>
> Я думал он с генофонда:) Пардон тоды
Такого в генофонде отродясь не было.
Dmitry S (2008-02-22 14:15:00) [3]
> Johnmen © (22.02.08 12:05) [11]
Я думал он с генофонда:) Пардон тоды
Смирнов (2008-02-22 13:02:00) [4]тот, кто писал процедуру SeqSearch, скорее всего и тип PStringArray объявлял и знает, с чего он начинается.
Johnmen (2008-02-22 12:05:00) [5]
> Дмитрий С (22.02.08 11:51) [10]
> да PStringArray полюбому определен как массив с нуля=)
Да ты шо??? Со свечкой стоял?
Дмитрий С (2008-02-22 11:51:00) [6]да PStringArray полюбому определен как массив с нуля=)
Sonia (2008-02-22 11:15:00) [7]
> Ega23 © (22.02.08 11:11) [8]
Ну да, так ессно лучше :).
Ой, ребята!!! Спасибо всем!!!!
ЗЫ Спасибо, что не посылали далеко ! :)))))
Ega23 (2008-02-22 11:11:00) [8]
> Ну я не имею в виду, объявленные статически ;)
for i:=Low(arr) to High(arr) do
arr[1] ....
:)
Sonia (2008-02-22 11:05:00) [9]
> Ega23 © (22.02.08 11:03) [6]
Ну я не имею в виду, объявленные статически ;)
Ega23 (2008-02-22 11:03:00) [10]
> как не все???? а какие не начинаются??
>
myarray : array[18..255] of Integer;
:)
Sonia (2008-02-22 11:01:00) [11]
> место потенциального глюка
> не все массивы начинаются с нуля
как не все???? а какие не начинаются??
> потому что это указатель, ты на тип параметра посмотри
Кстати, не нашла в справке по Дельфи тип PStringArray. Означает ли это что я не так искала или что это созданный ручками тип?
Правильный_Вася (2008-02-22 10:59:00) [12]потому что это указатель, ты на тип параметра посмотри
> for i:=0
место потенциального глюка
не все массивы начинаются с нуля
Sonia (2008-02-22 10:59:00) [13]
> я тебя пошлю к книжкам по программированию на Паскале для
> начинающих, где рассказывается про указатели и с чем их
> едят...
:(((( Честно честно, не работала еще с указателями на Паскале :(((
Сергей М. (2008-02-22 10:58:00) [14]
> Почему нельзя было просто aStrs[i] сделать?
Почему нельзя ? Можно.
Для компилятора в дан.случае конструкция с крышкой полностью эквивалентна конструкции без крышки, как что крышку можно смело убрать.
Palladin (2008-02-22 10:57:00) [15]я тебя пошлю к книжкам по программированию на Паскале для начинающих, где рассказывается про указатели и с чем их едят...