Главная страница
    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.035 c
3-79584
KADAN
2004-01-29 09:37
2004.02.25
Float поля в DBase


3-79638
nik7777
2004-01-31 16:35
2004.02.25
Вопрос об Lotus-Notes и ODBC


7-80302
~GaMeRd~
2003-12-06 16:39
2004.02.25
Работа с Вебброузер(вб)


14-80211
KM
2004-02-05 18:23
2004.02.25
эксплоиты


1-79695
Larry
2004-02-13 12:36
2004.02.25
Main Menu





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