Здравствуйте, Daedalus, Вы писали:
D>вот при конвертации в дельфи проблема появилась — хелп плиз!
D>имеется структура
D>typedef struct _PageStruct
D>{
D> DWORD dwSize;
D> DWORD dwPhysical;
D>} TPageStruct, * PPageStruct;
Совет, не плоди лишних монстров, типа PPagesStruct. Пользуйся *TPageStruct, и народу понятней будет.
А если у тебя C++, и ты не собираешься переводить это на C, то вообще достаточно будет
strcut TPageStrcut
{
DWORD dwSize;
DWORD dwPhysical;
};
D>внутри процедурки создается таковая pPages
D>TPageStruct* pPages = (TPageStruct*)(m_pMemStruct + 1);
D>и вдруг в цикле по i-той переменной появляется такое чудо :
D>i = 0;
D>while (i < m_pMemStruct->dwPages)
D>{
D> if (sum + pPages[i].dwSize > (unsigned)Offset)
D> {
D> Offset -= sum;
D> pRetVal = pPages[i].dwPhysical + Offset;
D> if ( pdwSizeAvailable != NULL )
D> {
D> *pdwSizeAvailable = pPages[i].dwSize - Offset;
D> }
D> break;
D> }
D>sum += pPages[i].dwSize;
D>i++;
D>}
D>сишный компилятор это дело сжирает безо всяких.
D>что могет быть здесь иметься ввиду под pPages[i] ?
D>эт жеж не массив а запись, я уже башку сломал ? Э:/
pPages[i] это тоже самое что *(pPages+i). Т.е. адрес (находящийся в pPages) смещаеться на i*sizeof(TPageStruct).
В С/С++ указатель на один элемент можно интерпритировать как указатель на массив элементов, при этом:
*pPages == *(pPages+0) == pPages[0].
А вообще, в любой книжке по C или C++ об этом обычно очень подробно написано, чуть ли не на первых страницах, причем гораздо лучше чем я тебе попытался объяснить.
P.S. Добавляй раскраску к коду, а то модераторы ругаться будут, и читать не очень привычно.