Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > Указатель на константу массив |
Автор: lucas 26.5.2006, 14:44 |
Здравствуйте. Кто знает возможно ли то что я пытаюсь реализовать. У меня несколько констант массивов, как мне работать с ними не обращаясь на прямую. Т.е функция getConst должна возвращать определенный масив примерно так: Caption:= getConst(0)[0].s; {='Кино'}, Caption:= getConst(1)[2].s; {='Морковь'}, type TTemp = record s:String; b:Integer; end; TForm1 = class(TForm) private { Private declarations } public function getConst(Index:Integer)://какой установить тип для получения константы { Public declarations } end; const OneArray:Array[0..1] of TTemp = ( (s: 'Кино'; b: 15), (s: 'Видио'; b: 25) ); TwoArray:Array[0..2] of TTemp = ( (s: 'Прокат'; b: 15), (s: 'Сок'; b: 25), (s: 'Морковь'; b: 25) ); var Form1: TForm1; implementation {$R *.dfm} function getConst(Index:Integer)://какой установить тип для получения константы begin case Index of 0: Result:= OneArray; 1: Result:= TwoArray; end; end; |
Автор: Romikgy 26.5.2006, 15:00 | ||
только введи в эти константы размеры массивов, а то имхо тяжко потом будет |
Автор: Dynamic 26.5.2006, 15:04 | ||
константу ты так не вернешь. Надо создать тип данных, который ты хочешь получать из getConst, типа
и передавать указатель на него, либо передавать переменную с массивом как var M: TMyArr в параметрах. |
Автор: lucas 26.5.2006, 15:22 |
Спасибо Dynamic Вам большое. Вы очень мне помогли. Действительно теперь все работает, но последний вопрос почему при такой схеме функция High для полученного массива возвращает не корректное значение unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TTemp = record s:String; b:Integer; end; PMyArr = ^TMyArr; TMyArr = array of TTemp; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public procedure getConst(Index:Integer; var M: TMyArr);//какой установить тип для получения константы { Public declarations } end; const OneArray:Array[0..1] of TTemp = ( (s: 'Кино'; b: 15), (s: 'Видио'; b: 25) ); TwoArray:Array[0..2] of TTemp = ( (s: 'Прокат'; b: 15), (s: 'Сок'; b: 25), (s: 'Морковь'; b: 25) ); var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.getConst(Index:Integer; var M: TMyArr );//какой установить тип для получения константы begin case Index of 0: M:= @OneArray; 1: M:= @TwoArray; end; end; procedure TForm1.Button1Click(Sender: TObject); var M: TMyArr; begin getConst(1, M); caption:= InTToStr(High(M)); //Возвращает 24, а должно 2 end; end. |
Автор: AriX 26.5.2006, 16:59 | ||
Нужно установить длину для M массива:
|
Автор: lucas 26.5.2006, 17:44 |
Всем большое спасибо. Вопрос полностью разрешен. |