Форум: "Начинающим";
Текущий архив: 2008.05.11;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.007 c