Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.02 c
1-79694
Leksss
2004-02-14 22:00
2004.02.25
Как отловить изменение буфера обмена ? (-)


3-79554
rosl
2004-02-02 05:43
2004.02.25
помогите с запросом


1-79753
Слэш
2004-02-12 08:33
2004.02.25
Форма StayOnTop не скрывается


1-79817
Edik86
2004-02-13 22:25
2004.02.25
Программа дала сбой


3-79658
Ермек
2004-01-31 01:56
2004.02.25
Схема данных