Маленький вопросец об указателях.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Дрюль
Сообщения: 18
Зарегистрирован: 15 окт 2004, 16:14

18 окт 2004, 19:34

Borland C++ 3.1 и ХР
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

19 окт 2004, 11:11

Код: Выделить всё

typedef unsigned char scrbuffer [64000]; 
scrbuffer *screen = (scrbuffer *)0xA000;
Когда пишем такое объявление, надо понимать, что scrbuffer[0] означает весь массив unsigned char scrbuffer [64000], а не первый элемент типа unsigned char. Т.е. с точки зрения последующего посимвольного доступа такое объявление смысла не имеет. Лучше делать так:

Код: Выделить всё

typedef unsigned char * TScreenBuf;
TScreenBuf sb = (TScreenBuf) 0xa000;
И ещё: прочитал в книжке Павловской, как присвоить указателю адрес памяти в явном виде. char *vp = (char *)0xB8000000 Набираю пример. Дословно. Выдаётся ошибка: cannot cast from 'unsigned long' to 'char *'. В чём косяк?
Попробуй char far *
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

19 окт 2004, 11:48

Код: Выделить всё

      char far *vp = (char far *)0xB8000000;
Всё прекрасно работает.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить