来自for循环的奇数输出

时间:2013-12-19 10:22:23

标签: c++ arrays for-loop sdl

我正在使用for循环来迭代我创建的一些数组,这些数组代表了鼠标可以悬停的区域。然后,当循环确认鼠标位于某个区域时,它会将迭代变量保存到稍后在主函数中使用的公共变量,以突出显示鼠标所在的区域。问题是for循环没有为第一次迭代提供正确的值。

{
//mouse offsets
int x = 0, y = 0;
//if mouse moves
if (event.type == SDL_MOUSEMOTION)
{
    //get the mouse co-ords
    x = event.motion.x;
    y = event.motion.y;

    for (int grid = 0; grid <= sizeof(grid_region); grid++)
    {

        if ((x > grid_region[grid].x) && (x < grid_region[grid].x + GRID_WIDTH) && (y > grid_region[grid].y) && (y < grid_region[grid].y + GRID_HEIGHT))
        {
            //set highlight region
            highlight = grid;
        }
    }
}

}

grid_region是通过“int grid_region [9];”生成的。而奇怪的是,当我后来做一个打印语句,看看什么“突出显示”是什么,当它在grid_region [0]中打印72.如何迭代变量在循环中的任何点变为72?这里有什么帮助?我后来使用突出显示在grid_region中应用精灵,并且它被错误地应用,所以这是一个问题。

1 个答案:

答案 0 :(得分:2)

sizeof(grid_region)的大小char 的倍数,而不是元素的数量。

也就是说,它是sizeof(int) * 9,而不是九,显然你的int是8 char宽,因为你的结果是72。

你可以循环到< sizeof(grid_region) / sizeof(grid_region[0]),或者更好地进入21世纪并使用std::vectorstd::array如果你的编译器足够时髦。