C ++将参数传递给函数

时间:2013-04-18 13:58:39

标签: c++ function declaration

最近我开始用C / C ++编程,但我觉得有点难以理解某些事情。例如,我的vertices.h文件:

#ifndef _vertices_h
#define _vertices_h

typedef struct
{
    float XYZW[4];
    float RGBA[4];
} Vertex;

extern Vertex Vertices[];
extern GLubyte Indices[];

#endif

我的vertices.c文件:

#include "vertices.h"

Vertex Vertices[] =
{
    { { 0.0f, 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }       
};
GLubyte Indices[] = {
    0, 1, 3,
    0, 3, 2,
    3, 1, 4,
    3, 4, 2
 };

不,我需要在其他.h文件中创建一个使用我的Vertices数组的函数。这是shader.c文件:

#include "vertices.h"

void CreateVBO(){ #############################################1
// some operations that uses the passed Vertices array
}

和我的“shaders.h”文件:

#ifndef _shaders_h
#define _shaders_h

void CreateVBO(); #############################################################2

#endif

现在我的问题是,在我的main函数中我调用函数CreateVBO,我想传递它需要的顶点数组。在我的情况下,我只宣布1,但我想宣布更多,并传递我想要的。所以基本上,我真的不知道如何声明函数CreateVBO的参数。我缺少的行标有####。

void doSemthing(int argc, char* argv[]){
...
CreateVBO(); #############################################################3
}

2 个答案:

答案 0 :(得分:1)

Vertices[]是全局的,您不需要通过参数传递它。但是,您也可以传递顶点。

使您的功能如下

void CreateVBO(Vertex vertices[]);

称之为

CreateVBO(Vertices);

答案 1 :(得分:1)

我的问题似乎并不清楚,虽然我假设您要向数组“Vertices []”声明更多元素,并且您希望将其中任何一个传递给“CreateVBO()”。< / p>

假设您在“vertices.h”中将“Vertices []”声明为:

Vertices[index1] = {...something....};    // Vertices with index1 elements.

现在在“shaders.h”文件中,您可以将CreateVBO()声明并定义为:

void CreateVBO(Vertex *V)
{
    //....something....

    V[index1].XYZW[index2]   // You can access the variables as shown.
    V[index1].RGBA[index2]   // You can access the variables as shown.

    //....something....
}

在“doSemthing()”中,顶点可以传递给“CreateVBO()”:

void doSemthing(int argc, char* argv[])
{
    ...something....

    CreateVBO(Vertices);

    ...something....
}