我有一个堆栈分配的固定大小的3D数组声明如下:
ofVec2f geometry[24][30][4];
我需要将它传递给一个函数来更新所有的ofVec2f值,并按照......的步骤进行更新。
for (int i = 0; i < 24; i++) {
for (int j = 0; j < 30; j++) {
ofVec2f verts[4];
for (int k = 0; k < 4; k++) {
verts[k] = foo;
}
geometry[i][j] = verts;
}
}
我的问题是,如何将此数据结构传递给函数以更新这些值并使数组指向这个新的ofVec2f值数组?我想我需要通过指针传递它们,但我不知道该怎么做,特别是因为我在堆栈上有一个固定的数组。
谢谢!如果您需要查看其他任何内容,请与我们联系。
答案 0 :(得分:2)
你可以这样做:
1)参考:
void function(ofVec2f (&array)[24][30][4]);
2)按指针:
void function(ofVec2f (*array)[30][4]);
3)使用模板传递任意大小的数组:
template <size_t X, size_t Y, size_t Z>
void function(ofVec2f (&array)[X][Y][Z]);
答案 1 :(得分:1)
您可以通过引用或指针传递它。如果像我一样,您发现引用到数组的语法有点毒,那么您可能希望使用using
别名或typedef
:
using GeometryType = ofVec2f[24][30][4]; // C++11
//typedef ofVec2f GeometryType[24][30][4]; // C++98
void fillGeometry(GeometryType& geometry) {
for (int i = 0; i < 24; i++) {
for (int j = 0; j < 30; j++) {
for (int k = 0; k < 4; k++) {
geometry[i][j][k].setX(0.0);
}
}
}
}
答案 2 :(得分:0)
您是否在任何地方都保留了对旧阵列的引用?如果没有,为什么要创建一组新的数组然后指向它们(从而标记旧数组以进行垃圾收集)?为什么不将新值分配给现有数组呢?
for (int k = 0; k < 4; k++) { (and thus
geometry[i][j][k] = foo;
}