2012-11-02 69 views
0

好了,我有一个包含一个指针(将是什么)POINT3对象的阵列的模型类:在C++复制阵列的堆叠阵列到阵列的阵列中的堆

point3* _vertices_colors; 

点3具有以下typedef:

typedef GLfloat point3[3]; 

实质上使point3对象的数组成为数组的数组。然后,在派生类的构造函数,我分配内存,因为我想存储如下顶点和颜色数:

_vertices_colors = new point3[16]; 

这意味着我的对象有8个顶点与存储在其自己的颜色。然后我定义堆栈准备复制到指针下面的数组:

point3 verticesColors[] = { 
          {1.0, 1.0, 1.0}, {1.0, 0.0, 0.0}, 
          {-1.0, 1.0, 1.0}, {1.0, 0.0, 0.0}, 
          {-1.0, -1.0, 1.0},{1.0, 0.0, 0.0}, 
          {1.0, -1.0, 1.0},{1.0, 0.0, 0.0}, 
          {1.0, 1.0, -1.0}, {1.0, 0.0, 0.0}, 
          {-1.0, 1.0, -1.0}, {1.0, 0.0, 0.0}, 
          {-1.0, -1.0, -1.0},{1.0, 0.0, 0.0}, 
          {1.0, -1.0, -1.0},{1.0, 0.0, 0.0} 
         }; 

然后,我使用for循环复制到阵列上的堆:

for(int i = 0; i < 16; i++) 
{ 
    *_vertices_colors[i,0] = *verticesColors[i, 0]; 
    *_vertices_colors[i,1] = *verticesColors[i, 1]; 
    *_vertices_colors[i,2] = *verticesColors[i, 2]; 

    printf("%15f", *_vertices_colors[i,0]); 
    printf("\t"); 
    printf("%15f", *_vertices_colors[i,1]); 
    printf("\t"); 
    printf("%15f", *_vertices_colors[i,2]); 
    printf("\n"); 
} 

然而,这似乎分配1.0,1.0,-1.0到阵列的16行中的每一行。我试过分配指向数组的指针,例如该行的其他方式:

_vertices_colors = verticesColors; 

由于verticesColors是恒定指向数组的指针,我想这会工作,但它产生相同的结果。我使用的memcpy也试过:

memcpy(_vertices_colors, verticesColors, sizeof(_vertices_colors)); 

但这似乎产生了一些不可控的结果。它将每个第一列分配为1.0,其余的为非常大的负整数。任何人都可以看到为什么我的第一种方法不工作?

+0

NB:阵列不是指针。 – 2012-11-02 12:49:38

+1

[我如何在C++中使用数组?](http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c)。我建议使用'typedef std :: array ,N> M> MyArray; MyArray a; MyArray * b = new MyArray(a);'或类似的C++风格 – sehe

+0

@ H2CO3否,但数组的标识符是指向第一个元素的常量指针。这就是我想说的。 – fanatic

回答

5

*_vertices_colors[i,0] = *verticesColors[i, 0]; 
*_vertices_colors[i,1] = *verticesColors[i, 1]; 
*_vertices_colors[i,2] = *verticesColors[i, 2]; 

相当于

*_vertices_colors[0] = *verticesColors[0]; 
*_vertices_colors[1] = *verticesColors[1]; 
*_vertices_colors[2] = *verticesColors[2]; 

您在阵列认购,其产生序列的最后一个值使用序列运营商,。在这种情况下为0,1和2

多维阵列被访问作为

_vertices_colors[i][0] = verticesColors[i][0]; 
+0

如果你解释了逗号做了什么,这将是一个良好的答案开始 – sehe

+0

这是行不通的,只是从C#移动到C++所遗留的东西我想。在C#中,'''用于多维数组,而'[i] [0]'用于访问锯齿状数组。 – fanatic

+0

位迟到通知您添加了解释。无论如何,+1 – sehe