2012-11-02 120 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