Текущий архив: 2004.02.25;
Скачать: CL | DM;
ВнизРабота с указателями в C и Pascal !!! Найти похожие ветки
← →
WebErr (2004-02-13 18:09) [0]В С массив от указателя почти ничем не отличается, в Пасе я встретился со следующими неприятностями:
Result {: ^Byte} := BytePointer + 3*(aX + RasterWidth*aY);
Выдаёт ошибку!!! Говорит, что нельзя складывать указатель и целое! Когда я разобрался, что указатель должен быть PChar, то тут же наткнулся на новую "бяку"!!!
Result {function: PChar} := PChar(BytePointer) + 3*(aX + RasterWidth*aY);
Несовместимость одинаковых типов Char и Byte - бред полный!!! Ну это ещё ладно, но когда он мне на:
PointPtr[0] {PointPtr: ^Byte} := GetRValue(aColor);
Выдал, что указатель и массив это совсем несовместимо в Пасе, то я понял, что пора писать в форум. "Выручайте, а то край" <(с)Брат 2>
← →
Dimka Maslov (2004-02-13 18:13) [1]1. Inc
2. Явное привдедение типов тебе поможет
3.
type
TByteArray = array[0..0] of Byte;
PByteArray = ^TByteArray;
var
P: PByteArray
Дальше работай как с массивом, но только не указывай константный индекс
← →
WebErr (2004-02-13 18:19) [2]В смысле?
P: PByteArray;
...
P[?] // чего с ним (вопросом) делать???
А почему нельзя константный индекс?!
И почему в Псе такая лажа с указателями?!
← →
y-soft (2004-02-13 18:21) [3]Все-таки C и Pascal языки разные, а не один язык с разным синтаксисом :)
Понятие "тип данных" в Паскале иное, гораздо более строгое
А разве это плохо?
← →
Palladin (2004-02-13 18:22) [4]Не вижу лажи... вернее вижу но не в Псе...
можешь и константный
type
TByteArray=array [0..MaxInt] of byte;
PByteArray=^TByteArray
← →
Dimka Maslov (2004-02-13 18:26) [5]>WebErr © (13.02.04 18:19) [2]
Индекс ставить
← →
WebErr (2004-02-13 18:26) [6]Так это вообще по смыслу получается P^[i], а как такой красоте присвоить указатель на байт, под который я уже выделил память?!
← →
Dimka Maslov (2004-02-13 18:27) [7]по смыслу так, но в данном случае ^ можно опустить, и работать как с массивом, а не как с указателем на массив
← →
WebErr (2004-02-13 18:30) [8]В смысле P^[i] и P[i] - это одно и то же?!! Странно как минимум! Но я попробую...
← →
Dimka Maslov (2004-02-13 18:38) [9]Синтаксис Delphi Pascal позволяет не разыменовывать указатели на массивы (array) и записи (record) при обращении к их элементам или полям, но требует разименовывания при обращении к записи в операторе with
← →
WebErr (2004-02-13 18:43) [10]А как же быть с динамически выделенной памятью под указатель на байт, мне теперь надо как-то выделить память либо под ваш тип, либо как-то совместить данные указателя на байт с указателем на байтовый массив, что маловероятно!!!
← →
Palladin (2004-02-13 18:45) [11]Ой... сделай лучше на Си, там проще же...
← →
WebErr (2004-02-13 18:50) [12]У меня сейчас нету С! А жаль!!!
← →
y-soft (2004-02-13 18:56) [13]>WebErr © (13.02.04 18:43) [10]
А в чем сложность-то?
Pascal по умолчанию не проверяет выход за объявленные границы массива.
Т.е. выделяйте памяти, сколько угодно, присваивайте ее указателю на массив из одного байта (Array[0..0] of Byte) и спокойно используйте. Только не забывайте следить, чтобы индекс не выходил за границы...
← →
WebErr (2004-02-13 19:04) [14]
> Только не забывайте следить, чтобы индекс не выходил за
> границы...
В смысле не выходил?!! А такая штука, например, как
SomeByte := BytePtr[3*aX+RasterWidth*aY];
?!! Как быть, если 3*aX+RasterWidth*aY > 0, 0 который и есть граница?
← →
y-soft (2004-02-13 19:07) [15]>WebErr © (13.02.04 19:04) [14]
Я не точно выразился - имеется в виду граница реально выделенной памяти, а то может быть AV :)
Страницы: 1 вся ветка
Текущий архив: 2004.02.25;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.032 c