Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Вообще-то... 11.10.03 15:19 Число просмотров: 1302
Автор: amirul <Serge> Статус: The Elderman
|
> Но в данном случае виноват не компилятор... buff512_r был > объявлен не как массив, а как указатель: > extern unsigned char *buff512_r; > а нужно было так: > extern unsigned char buff512_r[]; Там в тексте указано буквально следующее:
buff512_r- массив из unsigned char. // extern unsigned char buff512_r[512]
table - массив указателей на строки(ASCIIZ) НО по необходимости имеет тип unsigned long. //unsigned long table[256];
То бишь оба массива объявлены как действительно массивы. А операция приведения типа вообще одна из самых низкоприоритетных (по крайней мере значительно ниже операции индексировани), так что сначала должен взяться индекс, а потом у взятого значения приводиться тип.
> Вот и генерился код для разыменования этого указателя: > mov bx,[_buff512_r] > mov al,[bx] Хотя даже если бы это был указатель. Индексирование указателя совершенно аналогично индексированию массива. Кроме того, при передаче массива в функцию (даже если указаны константные размерности), он всегда передается как указатель. И тем не менее продолжает работать.
Может в данном случае нам и не сказали всю правду и компилятор действительно не виноват (хотя я сомневаюсь). Но я борландом уже зарекся пользоваться: у меня и моих знакомых было довольно много глюков, которые они вылавливали вылавливали, пока не поняли, что глючит не прога, а компилер. Я ничего не имею против борланда, хотя бы потому, что их продукты стоят $60, а MSVC - $1500. Но писать все равно не хочу.
|
|
|