Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.11;
Скачать: CL | DM;

Вниз

Pointer & array   Найти похожие ветки 

 
webpauk ©   (2008-04-11 14:44) [0]

const
  cArr1: array[1..3] of String = ("", "", "");
  cArr2: array[1..2] of String = ("", "");
var
  fArr: Pointer;
begin
  if ... then fArr:=@cArr1 else fArr:=@cArr2;


вопрос: как через fArr обратиться к массиву?


 
DVM ©   (2008-04-11 14:45) [1]


> вопрос: как через fArr обратиться к массиву?

переписать код надо иначе никак


 
Ega23 ©   (2008-04-11 14:46) [2]

^


 
Reindeer Moss Eater ©   (2008-04-11 14:47) [3]

к такому через PChar


 
Сергей М. ©   (2008-04-11 14:47) [4]

type
 PMyStrArray = ^TMyStrArray;
 TMyStrArray = array[1..N] of String;

..

fArr: PMyStrArray;

ShowMessage(fArr[1]);


 
webpauk ©   (2008-04-11 14:50) [5]


> Сергей М. ©   (11.04.08 14:47) [4]

если ты заметил размерность массивов разная


 
DVM ©   (2008-04-11 14:51) [6]


> если ты заметил размерность массивов разная

а как ты потом узнаешь на какой тип указывает указатель, чтобы потом правильно работать с данными на которые указатель указывает?


 
Anatoly Podgoretsky ©   (2008-04-11 14:52) [7]


> вопрос: как через fArr обратиться к массиву?

Никак, переменная не инициализирована и второе, абсолютно нет никакой информации об размерности.


 
Anatoly Podgoretsky ©   (2008-04-11 14:56) [8]

> DVM  (11.04.2008 14:51:06)  [6]

А очень просто, он установить {$R-} оно и так по умолчанию.


 
webpauk ©   (2008-04-11 14:58) [9]


> Anatoly Podgoretsky ©   (11.04.08 14:52) [7]

ладно, массивы сделаю одинаковыми...
а что савсэм никак?


 
DVM ©   (2008-04-11 15:01) [10]


> Anatoly Podgoretsky ©   (11.04.08 14:56) [8]


> он установить {$R-}

это немного поможет, но не решение все равно.


> а что савсэм никак?

а для чего это нужно? может есть более красивое решение.


 
webpauk ©   (2008-04-11 15:02) [11]


> DVM ©   (11.04.08 15:01) [10]

решение всегда есть. Просто тиресно...


 
DVM ©   (2008-04-11 15:05) [12]


> Просто тиресно...

В том виде, в котором ты описал задачу, так работать с обоими массивами через указатель не выйдет. Указатель содержит лишь адрес, и не содержит никакой инфы о размере массива.

Либо динамический массив возьми либо еще как, но для этого надо знать конечную цель.


 
webpauk ©   (2008-04-11 15:09) [13]

ладно...
тогда вот такое:

procedure pSetListColumnsEx;
type
 TColumnProp = packed record
   rN: String;
   rW: Integer;
 end;

 TColumnPropArr = array[1..4] of TColumnProp;
const
 cArr1: TColumnPropArr = ((rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0));
 cArr1: TColumnPropArr = ((rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0));

 cColumnPropArr: array[TMain] of TColumnPropArr = (cArr1, cArr2);
- как здесь правильно записать?


 
webpauk ©   (2008-04-11 15:11) [14]

для простоты
cColumnPropArr: array[1..2] of TColumnPropArr = (cArr1, cArr2);


 
DVM ©   (2008-04-11 15:13) [15]


> webpauk ©   (11.04.08 15:09) [13]

это задание типа "Исправить все ошибки" ?


 
Сергей М. ©   (2008-04-11 15:14) [16]


> как здесь правильно записать?
>


PColumnProp =^TColumnProp;

..

cColumnPropArr: array[TMain] of PColumnPropArr = (@cArr1, @cArr2);


 
webpauk ©   (2008-04-11 15:14) [17]


> DVM ©   (11.04.08 15:13) [15]

вообще то да...
я просто не встречался ранее и бьюсь головой об стенку


 
DVM ©   (2008-04-11 15:19) [18]


> webpauk ©

может по-простому:

cColumnPropArr: array[1..2] of TColumnPropArr = (((rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0)), ((rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0)));


это ж константа все равно.


 
webpauk ©   (2008-04-11 15:21) [19]


> DVM ©   (11.04.08 15:19) [18]

можно, но не красиво...


 
Anatoly Podgoretsky ©   (2008-04-11 15:21) [20]

> webpauk  (11.04.2008 15:14:17)  [17]

Бьешься возможно из-за неправильной поставновки в твоей голове, но нам ты ее говорить не хочешь и каких же ты советов ждешь? И какие тебе могут дать, может потом придется за голову хвататься.


 
webpauk ©   (2008-04-11 15:21) [21]


> Сергей М. ©   (11.04.08 15:14) [16]

а как обратиться к элементу?

procedure pSetListColumnsEx;
type
 TColumnProp = packed record
   rN: String;
   rW: Integer;
 end;

 PColumnPropArr=^TColumnPropArr;
 TColumnPropArr = array[1..4] of TColumnProp;
const
 cTypeArr: TColumnPropArr = ((rN: "¹"; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0));
 cPartnerArr: TColumnPropArr = ((rN: "¹"; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0));
 cUnitArr: TColumnPropArr = ((rN: "¹"; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0));
 cGoodsArr: TColumnPropArr = ((rN: "¹"; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0), (rN: ""; rW: 0));

 cColumnPropArr: array[TMain] of PColumnPropArr  = (@cTypeArr, @cPartnerArr, @cUnitArr, @cGoodsArr);
begin

 ShowMessage(cColumnPropArr...);
end;


 
DVM ©   (2008-04-11 15:23) [22]


> можно, но не красиво...

Такого вида константы, как ты привел уже сами по себе не особо красивы. В глазах аж рябит.


 
Сергей М. ©   (2008-04-11 15:24) [23]

ShowMessage(cColumnPropArr[i][j].rN)


 
webpauk ©   (2008-04-11 15:25) [24]


> DVM ©   (11.04.08 15:23) [22]

согласен...
зато потом хорошо


 
webpauk ©   (2008-04-11 15:27) [25]


> Сергей М. ©   (11.04.08 15:24) [23]

Constant expression violates subrange bounds


 
webpauk ©   (2008-04-11 15:28) [26]


> webpauk ©   (11.04.08 15:27) [25]

упс... ставил элементы вне размерности

> Сергей М. ©   (11.04.08 15:24) [23]

спасибо


 
Reindeer Moss Eater ©   (2008-04-11 15:28) [27]

const arr : array[1..3] of string = ("one","two","three");

var p : pcardinal;
begin
p := @arr[1];
ShowMessage(PChar(p^));
inc(p);
ShowMessage(PChar(p^));
inc(p);
ShowMessage(PChar(p^));
...


 
<code>   (2008-04-11 15:38) [28]

>вопрос: как через fArr обратиться к массиву?
Вот так:

const
 cArr1: array[1..3] of String = ("123", "456", "789");
var
 fArr: Pointer;
begin
 fArr:=@cArr1[3];
 Caption:=Pstring(fArr)^;
end;


 
webpauk ©   (2008-04-11 15:40) [29]


>   (11.04.08 15:38) [28]

к какому элементу?


 
<code>   (2008-04-11 15:43) [30]

>к какому элементу?
К третьему.


 
webpauk ©   (2008-04-11 15:54) [31]


>   (11.04.08 15:43) [30]

а к первому?


 
<code>   (2008-04-11 15:57) [32]

>а к первому?

Так же, только указатель следует направить на первый элемент массива
fArr:=@cArr1[1]

const
cArr1: array[1..3] of String = ("123", "456", "789");
var
fArr: Pointer;
begin
fArr:=@cArr1[1];
Caption:=Pstring(fArr)^;
end;


 
clickmaker ©   (2008-04-11 16:01) [33]

а ко второму соответственно так:

Так же, только указатель следует направить на второй элемент массива
fArr:=@cArr1[1]

const
cArr1: array[1..3] of String = ("123", "456", "789");
var
fArr: Pointer;
begin
fArr:=@cArr1[2];
Caption:=Pstring(fArr)^;
end;


 
webpauk ©   (2008-04-11 16:04) [34]


> clickmaker ©   (11.04.08 16:01) [33]


>   (11.04.08 15:57) [32]

у зубры...


 
Reindeer Moss Eater ©   (2008-04-11 16:23) [35]

вариант с типизированным указателем на четырехбайтовый тип изящнее.



Страницы: 1 вся ветка

Текущий архив: 2008.05.11;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.012 c
15-1206796838
@!!ex
2008-03-29 16:20
2008.05.11
Что за музыка?


15-1206524725
capkoh
2008-03-26 12:45
2008.05.11
Изучение SQL. Сколько времени?


4-1188376536
leonidus
2007-08-29 12:35
2008.05.11
Как определить типа сглаживания шрифтов в системе?


15-1206783905
builder
2008-03-29 12:45
2008.05.11
Посоветуйте программку для прослушивания радио через интернет


2-1207815713
azamatufa
2008-04-10 12:21
2008.05.11
TADOQuery - параметры...