好的,所以我有一个模型类,它包含指向(将会是)一个point3对象数组的指针:
point3* _vertices_colors;
Point3具有以下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");
}
但是,这似乎为数组的16行中的每一行分配1.0,1.0,-1.0。我已经尝试过将指针分配给数组的其他方法,例如行:
_vertices_colors = verticesColors;
由于verticesColors是一个指向数组的常量指针,我认为这样可行,但它会产生相同的结果。我也尝试过使用memcpy:
memcpy(_vertices_colors, verticesColors, sizeof(_vertices_colors));
但这似乎会产生一些无法控制的结果。它将每个第一列分配为1.0,其余列为非常大的负整数。谁能明白为什么我的第一种方法不起作用?
答案 0 :(得分: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];