好了,我有一個包含一個指針(將是什麼)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,其餘的爲非常大的負整數。任何人都可以看到爲什麼我的第一種方法不工作?
NB:陣列不是指針。 – 2012-11-02 12:49:38
[我如何在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
@ H2CO3否,但數組的標識符是指向第一個元素的常量指針。這就是我想說的。 – fanatic