如何从 C 函数返回对象数组?

问题描述 投票:0回答:1

这个问题对你们中的一些人来说可能非常愚蠢,但我对 C 编程很陌生。我目前正在用纯 C 创建 3D 引擎,我想知道如何从 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);

预先感谢您,请原谅我的英语!

c sdl sdl-2
1个回答
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);  
© www.soinside.com 2019 - 2024. All rights reserved.