Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1206720548
Галинка
2008-03-28 19:09
2008.05.11
Можно ли скопировать файл...


2-1207819934
Chorniy
2008-04-10 13:32
2008.05.11
Опять ReadProcessMemory :( теперь у всех процессов одни данные?


10-1144838758
avgousto
2006-04-12 14:45
2008.05.11
Script parsing


2-1208152850
lewka-serdceed
2008-04-14 10:00
2008.05.11
ComboBox в ячейке StringGrid


2-1208111337
assassin8899
2008-04-13 22:28
2008.05.11
Множественный выбор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский