Главная страница
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.027 c
4-80379
deema
2003-12-14 19:20
2004.02.25
Как определить ширину текста в пункте меню?


14-80125
EAlexander
2004-02-02 17:22
2004.02.25
IE


1-79865
h0use
2004-02-09 16:58
2004.02.25
Работа в D8


1-79834
karburator
2004-02-10 11:05
2004.02.25
Как узнать путь к программе из запущенного ею потока?


8-80044
Демон
2003-10-24 23:36
2004.02.25
Плейлист