Работа с массивами в Delphi
От: Аноним  
Дата: 10.02.03 09:29
Оценка:
Пример:
procedure GG(Arrra : array of integer);
begin
  //что получим, если написать
  ShowMessage(IntToStr(Arrra[1])); 
end;

procedure BB();
var blabla : array [1..20] of integer;
begin
  blabla[1]:=12;
  GG(blabla);
end;

Почему в сообщении не "12"? Вообще почему идет чтение не 1-го элемента?
Re: Работа с массивами в Delphi
От: mrhru Россия  
Дата: 10.02.03 09:37
Оценка: 10 (1)
Здравствуйте, <Аноним>, Вы писали:

А>Пример:

А>
А>procedure GG(Arrra : array of integer);
А>begin
А>  //что получим, если написать
А>  ShowMessage(IntToStr(Arrra[1])); 
А>end;

А>procedure BB();
А>var blabla : array [1..20] of integer;
А>begin
А>  blabla[1]:=12;
А>  GG(blabla);
А>end;
А>

А>Почему в сообщении не "12"? Вообще почему идет чтение не 1-го элемента?

array of integer, как параметр функции — начинается всегда с 0.

"Within the body of a routine, open array parameters are governed by the following rules.

They are always zero-based. The first element is 0, the second element is 1, and so forth. The standard Low and High functions return 0 and Length — 1, respectively. The SizeOf function returns the size of the actual array passed to the routine."
Евгений
Re: Работа с массивами в Delphi
От: Vuhasty Украина  
Дата: 10.02.03 14:43
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Пример:

А>
А>procedure GG(Arrra : array of integer);
А>begin
А>  //что получим, если написать
А>  ShowMessage(IntToStr(Arrra[1])); 
А>end;

А>procedure BB();
А>var blabla : array [1..20] of integer;
А>begin
А>  blabla[1]:=12;
А>  GG(blabla);
А>end;
А>

А>Почему в сообщении не "12"? Вообще почему идет чтение не 1-го элемента?

Неплохо бы было сначала инициировать етот масив:
procedure BB();
var blabla : array [1..20] of integer;
begin
SetLength(blabla, 2);
blabla[1]:=12;
GG(blabla);
end;
Re[2]: Работа с массивами в Delphi
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.02.03 16:03
Оценка:
Здравствуйте, Vuhasty, Вы писали:

V>Неплохо бы было сначала инициировать етот масив:

НИ В КОЕМ СЛУЧАЕ!
procedure BB(); 
  var blabla : array [1..20] of integer; 
begin 
  SetLength(blabla, 2); 
  blabla[1]:=12; 
  GG(blabla); 
end;

SetLength применимо только к динамическим массивам. Т.е. к таким, которые декларируются без указания размера:
  var dynamicBlaBla: array of integer;
... << RSDN@Home 1.0 beta 6 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Работа с массивами в Delphi
От: Vuhasty Украина  
Дата: 10.02.03 16:34
Оценка:
Да действительно !
извини ошибся
Re: Работа с массивами в Delphi
От: Kwan  
Дата: 11.02.03 00:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему в сообщении не "12"? Вообще почему идет чтение не 1-го элемента?

Напиши Arrra[0] и будет тебе счастье ибо первый элемент у динамического массива — нулевой.
Re: Работа с массивами в Delphi
От: JokerWild  
Дата: 11.02.03 09:05
Оценка: -1
Здравствуйте, <Аноним>, Вы писали:

А>Пример:

А>
А>procedure GG(Arrra : array of integer);
А>begin
А>  //что получим, если написать
А>  ShowMessage(IntToStr(Arrra[1])); 
А>end;

А>procedure BB();
А>var blabla : array [1..20] of integer;
А>begin
А>  blabla[1]:=12;
А>  GG(blabla);
А>end;
А>

А>Почему в сообщении не "12"? Вообще почему идет чтение не 1-го элемента?

Надо установить размерность массива до его использования функцией
Попробуй так
procedure GG(Arrra : array of integer);
begin
  ShowMessage(IntToStr(Arrra[1]));
end;

procedure BB;
  var blabla : array of integer;
begin
  SetLength(blabla, 2);
  blabla[1]:=12;
  GG(blabla);
end;

Удачи.
... << RSDN@Home 1.0 beta 6a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.