通过引用 C 传递时结构内的指针不会改变

Pointer inside a structure not changing when passing by reference C

所以,我是 C 语言的新手,我的教授已经通过了一个用 C 语言制作游戏的项目。我的问题是,我创建了一个像这样的结构:

typedef struct vector
{
    int parts;
    int dir;
} Vector;

typedef struct snake
{
    Vector* parts;
    Vector dir;
} Snake;

我正在尝试初始化此函数中的 parts 指针:

void init_snake(struct snake *snake, int size, int x, int y)
{
    snake->parts = (Vector *)malloc(sizeof(Vector) * size);

    for (int i = 0; i < size; i++)
    {
        //sets the body parts one after the other in a line
        snake->parts[i].x = x - i * PIXEL_SIZE;
        snake->parts[i].y = y;
    }

    //sets the snake direction to the left
    snake->dir.x = 1;
    snake->dir.y = 0;
}

但是通过这样做,蛇指针中的数组 parts 没有按预期初始化。通过使用 sizeof(snake.parts) / sizeof(Vector) 检查它的大小 returns 0。关于如何修复它有什么想法吗?

它可能有效,您只是对 sizeof 感到困惑。此运算符测量 type 的大小(以字节为单位)。如果您要求一个值的大小,它会使用该表达式的类型。

这是编译时评估,因此不是动态的。

sizeof(snake.parts)sizeof(Vector*) 相同,后者是 4 字节还是 8 字节,具体取决于您编译的是 32 位还是 64 位目标。因此,确定分配的大小没有用。

通常,给定一个指针,您无法判断分配有多大。通常这是通过在其他地方存储某种有用的长度来处理的。例如,您可以修改 struct snake 以包含 parts:

的元素计数
typedef struct snake
{
    Vector* parts;
    int parts_size;
    Vector dir;
} Snake;

并相应地设置这个值:

snake->parts = (Vector *)malloc(sizeof(Vector) * size);
snake->parts_size = size;