Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Вниз

Работа с указателями в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.033 c
14-80133
miwa
2004-02-05 06:51
2004.02.25
А вот есть ли такая программа?


1-79725
Awod
2004-02-12 11:59
2004.02.25
Плывушие шрифты


14-80132
real_dimedrol
2004-01-30 16:43
2004.02.25
Обои в NT


14-80256
REA
2004-02-06 10:40
2004.02.25
Imagebase


6-80083
beeper
2003-12-16 19:31
2004.02.25
Изменить настройки сети





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский