![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: нет Всего: 23 |
Опишите (прокомментируйте), пожалуйста, эти строки:
4-я строка - это, что, сдвиг вправо на 3 разряда? В 5-ой строке понимаю идет выделение памяти, но ее размер байт что ли? Из условия задачи знаю, что bi.bmWidth и bi.bmHeight =200, то есть уже больше байта. Описание переменных, ясное дело, понятно. Меня интересует сам код. |
|||
|
||||
creatorcode |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.6.2006 Где: Ленинград Репутация: 1 Всего: 4 |
||||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: нет Всего: 23 |
Уже лучше, а остальное?
Нет не лучше: bi.bmWidth * bi.bmHeight * bpp однозначно больше байта, ведь
Это сообщение отредактировал(а) anwe - 9.7.2008, 20:10 |
|||
|
||||
system |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.5.2008 Репутация: 1 Всего: 2 |
||||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: нет Всего: 23 |
Так, это понятно, просто в фразе
меня смутило что bi.bmWidth * bi.bmHeight * bpp - это элементы массива. А это его размер. Все, ясно. Что с остальными строками? Опишите!!! Это сообщение отредактировал(а) anwe - 9.7.2008, 20:34 |
|||
|
||||
system |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.5.2008 Репутация: 1 Всего: 2 |
|
|||
|
||||
anwe |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: нет Всего: 23 |
По последним двум строкам кода уточнения:
Теперь переменная TransPixel также содержит указатель на вновь объявленный массив?
Наверное, приравнивание не самой себя а так: значение TransPixel отнимается от 32, сдвигается влево на 3 разряда и снова заносится в TransPixel. Верно? |
||||
|
|||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
anwe
|
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
">> 3 " в данном случае выполняет роль целочисленного деления ( /8 ), результат которого будет минимальное кол-во байтов нужное для хранения одного пикселя. |
|||
|
||||
system |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.5.2008 Репутация: 1 Всего: 2 |
я тоже по спешке ошибся в этом месте, немного не так т.е. как уже сказали но исправлюсь в этом месте
равнозначен :
или еще проще
|
||||||||
|
|||||||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: нет Всего: 23 |
Спасибо всем, но есть но.
Снова здорово:
выделяет массив байт и этот массив имеет размерность bi.bmWidth * bi.bmHeight * bpp. Раз выделяет память, значит результат ее - указатель. Вопрос: как он, указатель, может быть байтом? ![]() |
|||
|
||||
varnie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 27.9.2007 Репутация: нет Всего: 0 |
выделяется память под bi.bmWidth * bi.bmHeight * bpp байт, и в переменную pBits закидывается указатель на этот блок выделенной памяти. а сама переменная pBits является просто указателем на байт. в д. случае она указывает на начало выделенного блока.
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
Указатель не байт, указатель указывает на байт ![]() |
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: нет Всего: 23 |
То есть, BYTE показывает, что она указывает на первый байт выделенной памяти? Так это и так ясно, что указатель указывает на первый байт чего-либо. Что, значит, к примеру, BYTE *pBits указывает на первое двойное слово выделенной памяти? Если да, то как то странно, значение адреса ведь, что у байта что у двойного слова одно и переменная pBits в любом случае будет содержать один и тот же адрес.
|
|||
|
||||
varnie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 27.9.2007 Репутация: нет Всего: 0 |
BYTE b; //переменная типа BYTE (т.е. unsigned char)
BYTE *pByte //переменная, указывающая на байт. в мире виндовс есть также определенный тайпдеф(typedef), PBYTE -- это то же самое что и "BYTE *". pByte в данном случае указывает не на первое двойное слово памяти, а на первый байт аллоцированной памяти. cкажем, есть у нас BYTE *pByte = new BYTE[10]; если мы сделаем: DWORD pDword = (DWORD *)pByte; ++pDword; то мы сдвинемса от начала выделенного блока состоящего из 10 байт на 4 байта. т.е. "шагать" по памяти будем "4байтными" шагами ![]() если бы мы двигались имея изначальный pByte, то после ++pByte мы бы сдвинулись не на 4 байта, а лишь на один. Это сообщение отредактировал(а) varnie - 10.7.2008, 23:06 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |