我想知道如何从 C 函数返回对象数组。
这是一个例子:
SDL_Vertex initTriangle (struct Point2D point1, struct Point2D point2, struct Point2D point3) {
SDL_Vertex triangleVertex[3]=
{
{
{ new_point1.x,new_point1.y },
{ 255, 255, 0, 0xFF },
{ 0.f, 0.f }
},
{
{ new_point2.x, new_point2.y },
{ 0,255,255, 0xFF },
{ 0.f, 0.f }
},
{
{ new_point3.x, new_point3.y },
{ 255,0,255, 0xFF },
{ 0.f, 0.f }
}
};
return triangleVertex;
};
SDL_Vertex triangleVertex[3] = initTriangle(...);
SDL_RenderGeometry(renderer, NULL, triangleVertex, 3, NULL, 0);
我想做类似的事情,但我需要让函数返回一个对象,就像我在做这个一样:
SDL_Vertex triangleVertex[3]=
{
{
{ new_point1.x,new_point1.y },
{ 255, 255, 0, 0xFF },
{ 0.f, 0.f }
},
{
{ new_point2.x, new_point2.y },
{ 0,255,255, 0xFF },
{ 0.f, 0.f }
},
{
{ new_point3.x, new_point3.y },
{ 255,0,255, 0xFF },
{ 0.f, 0.f }
}
};
SDL_RenderGeometry(renderer, NULL, triangleVertex, 3, NULL, 0);
看起来您希望
initTriangle
返回 3 个 SDL_Vertex
的数组。
您不能以这种方式(按值)从 C 函数返回数组。
一种解决方案是接受它作为参数并将其填充到函数中:
void initTriangle (struct Point2D point1,
struct Point2D point2,
struct Point2D point3,
SDL_Vertex triangleVertex[3]) // <- add this parameter
{
// Fill the array passed in:
triangleVertex[0] =
{
{ new_point1.x,new_point1.y },
{ 255, 255, 0, 0xFF },
{ 0.f, 0.f }
};
triangleVertex[1] =
{
{ new_point2.x, new_point2.y },
{ 0,255,255, 0xFF },
{ 0.f, 0.f }
};
triangleVertex[2] =
{
{ new_point3.x, new_point3.y },
{ 255,0,255, 0xFF },
{ 0.f, 0.f }
};
};
使用示例(调用者的数组作为最后一个参数传递):
SDL_Vertex myTriangleVertex[3];
initTriangle(..., myTriangleVertex);
另一种选择是在堆上的函数内部分配数组,然后返回它。但这需要调用者记住释放数组以避免内存泄漏。
在这种情况下,我认为我建议的第一个解决方案是简单且更好的解决方案。