Не могли бы вы помочь объяснить этот код? - PullRequest
0 голосов
/ 09 июня 2011

У меня есть эта функция, которую я пытаюсь преобразовать, но я просто не могу понять, что происходит в некоторых частях кода.Может кто-нибудь помочь мне и объяснить код.Я просто хочу знать, что они делают с указателями.Есть несколько пустых комментариев в коде, где они чертовски работают с указателями, я просто не понимаю.

Любая помощь приветствуется.

WORD** m_Pixels;

int pixel(int x, int y)
{

    if (x<0 || y<0 || x>=m_Width || y>=m_Height)
        return -1;

    WORD    *pPixels = m_Pixels[y];

    //
    int count = *pPixels++;

    int index = 0;

    register int i;

    if (count > 0)
    {
        i = count;
        do {
            // 
            index += *pPixels++;

            if (x < index)
            {
                return -1;
            }

            //      
            index += *pPixels;

            // 
            pPixels += *pPixels;

            pPixels++;


            // 
            index += *pPixels;

            // 
            pPixels += *pPixels;

            pPixels++;

            if (x < index)
            {
                return pPixels[x-index];
            }
        } while (--i);
    }

    return -1;
}

1 Ответ

2 голосов
/ 09 июня 2011
int count = *pPixels++;

Разыменовывает указатель pPixels для получения значения и присваивает его count и увеличивает указатель - это заставит указатель указывать на следующий элемент в массиве (m_Pixels)


index += *pPixels++;

Увеличивать index со значением, указанным на pPixels, и увеличивать указатель - это заставит указатель указывать на следующий элемент в массиве


pPixels += *pPixels;
pPixels += *pPixels;

Переместить указатель X на позиции вперед, где X - значение, обозначенное pPixels

...