来自 for 循环的奇数输出

Odd output from a for loop

本文关键字:输出 for 循环 来自      更新时间:2023-10-16

我正在使用 for 循环来迭代我创建的一些数组,这些数组表示鼠标可以悬停的区域。然后,当循环确认鼠标位于某个区域中时,它会将迭代变量保存到公共变量中,稍后在 main 函数中使用该变量来突出显示鼠标所在的区域。问题是 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中应用精灵,但它应用不正确,所以这是一个问题。

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

也就是说,它是 sizeof(int) * 9 ,而不是 9,显然你的int是 8 char s 宽,因为你最终在 72 岁。

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