C++ 初始化C+中的glfloat多维数组+;

C++ 初始化C+中的glfloat多维数组+;,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,关于如何正确地逐行初始化GLFloats数组,我现在脑子里有一个结。 据我所知,数组可以这样写: int a[2][2] = {{1,2},{3,4}} for(iii = 0; iii <= 9; iii++) { targetVertices[iii] = { /*Side 1*/ targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,

关于如何正确地逐行初始化GLFloats数组,我现在脑子里有一个结。 据我所知,数组可以这样写:

int a[2][2] = {{1,2},{3,4}}
for(iii = 0; iii <= 9; iii++) {
    targetVertices[iii] = {                  /*Side 1*/
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
                                             /*Side 2*/
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
                                             /*Side 3*/
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
                                             /*Side 4*/
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
                                             /*Side 5*/
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
                                             /*Side 6*/
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1
                          };
}
glBufferData(GL_ARRAY_BUFFER,
             data.size()*sizeof(GLfloat),
             &data[0],
             GL_STREAM_DRAW);
在我的例子中,我有数组

GLfloat targetVertices[10][72];
用于立方体六个边的顶点(确切地说是十个立方体)。立方体坐标存储在

float targetX[10], targetY[10], targetZ[10];
数组。我想这样初始化它:

int a[2][2] = {{1,2},{3,4}}
for(iii = 0; iii <= 9; iii++) {
    targetVertices[iii] = {                  /*Side 1*/
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
                                             /*Side 2*/
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
                                             /*Side 3*/
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
                                             /*Side 4*/
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
                                             /*Side 5*/
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
                                             /*Side 6*/
                           targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
                           targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
                           targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1
                          };
}
glBufferData(GL_ARRAY_BUFFER,
             data.size()*sizeof(GLfloat),
             &data[0],
             GL_STREAM_DRAW);

for(iii=0;iii语法的问题在于,如果说targetVertices[iii],那么您指的是数组的第i个索引,而不是整个列。2D数组存储为1D数组,但提供了[][]以便于访问。您可以将其称为一维或二维数组

下面是一种更可重用的方法

void addVertex(std::vector<GLfloat> &data, GLfloat x, GLfloat y, GLfloat z)
{
    data.push_back(x);
    data.push_back(y);
    data.push_back(z);
}

非常感谢,我将尝试并实现您的解决方案。但是,出于理解的目的,为什么我不能简单地将数据逐行分配给数组?它适用于字符数组(至少在ANSI-C中是这样)。此外,我可能有措词错误,因为它本身不是初始化,而是分配(我预先在两个嵌套for循环中进行初始化,都是零)。它可能通过使用“new”关键字工作吗?比如,在我的头文件和构造函数targetVertices=new-GLfloat[][]中写入GLfloat*targetVertices;或者其他什么?语法的问题是说targetVertices[iii]您指的是阵列的第i个索引,而不是整个列。请参阅,2D阵列存储为1D阵列,但提供[][]以便于访问。您可以将其称为一维或二维。如果您已经分配了10x72阵列,则无需“新建”。