我有一个组织为
的二维数组float vertices[3][3]
在我的程序的一个迭代循环中,我在调试器中看到数组是这样填满的:
vertices[0] = {-1, -1, 1}
vertices[1] = {-1, -.5, .5}
vertices[2] = {-.5, -1, .5}
然后我将这三个顶点传递给我的三角形类。
Triangle *t = new Triangle(vertices[0], vertices[1], vertices[2]);
triangles.push_back(*t);
三角形构造函数编码如下:
Triangle::Triangle(float *a, float *b, float *c)
{
memcpy(v1, a, sizeof(a));
memcpy(v2, b, sizeof(b));
memcpy(v3, c, sizeof(c));
}
我的调试器现在显示
v1 = {-1, -431602080, -431602080}
v2 = {-1, -431602080, -431602080}
v3 = {-.5, -431602080, -431602080}
调试器还显示 a/b/c 只有 1 个元素长? 那么显然只有数组的第一个元素被传递了?
最佳答案
sizeof(a)
实际上是
sizeof (float*)
这不是 3x float ,它是 1 个指针。传递附加参数 size_t number_of_members_in_array 并替换
memcpy(v1, a, sizeof(a));
与
memcpy(v1, a, sizeof(*a) * number_of_members_in_array);
Triangle::Triangle(float *a, int numA, float *b, int numB, float *c, int numC)
{
memcpy(v1, a, sizeof(float) * numA);
memcpy(v2, b, sizeof(float) * numB);
memcpy(v3, c, sizeof(float) * numC);
}
关于c++ - 将数组传递给类函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32578200/