0

変換しようとしているこの関数がありますが、コードの一部で何が起こっているのか理解できません。誰でも私を助けてコードを説明してください。彼らがポインターで何をするのか知りたいだけです。コードには、ポインターで地獄を行う空白のコメントがいくつかありますが、私はそれを理解していません。

どんな助けでも感謝します。

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;
}
4

1 に答える 1

2
int count = *pPixels++;

ポインターを逆参照しpPixelsて値を取得し、それをポインターに割り当ててcountインクリメントします。これにより、ポインターが配列内の次の要素を指すようになります ( m_Pixels)


index += *pPixels++;

index値をインクリメントpPixelsし、ポインターをインクリメントします。これにより、ポインターが配列内の次の要素を指すようになります


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

ポインター X の位置を先に移動します。ここで、X は、によってポイントされる値です。pPixels

于 2011-06-09T10:00:15.240 に答える