Re: си-синтаксис
От: comer США http://getboost.codeplex.com/
Дата: 22.12.02 16:19
Оценка: 2 (1)
Здравствуйте, 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. Добавляй раскраску к коду, а то модераторы ругаться будут, и читать не очень привычно.
getboost.codeplex.com
citylizard.codeplex.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.