我有一个堆栈分配的固定大小的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值数组?我想我将需要通过指针传递它们,但我不确定如何做到这一点,特别是因为我在堆栈上有一个固定的数组。
谢谢!
你可以这样做:
1)引用:
void function(ofVec2f (&array)[24][30][4]);
2) By指针:
void function(ofVec2f (*array)[30][4]);
3)使用模板传递任意大小的数组:
template <size_t X, size_t Y, size_t Z>
void function(ofVec2f (&array)[X][Y][Z]);
可以通过引用或指针传递。如果像我一样,您发现引用到数组的语法有点糟糕,那么您可能希望使用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);
}
}
}
}
您是否在任何地方保留了对旧数组的引用?如果不是,为什么要创建一组新的数组,然后指向它们(从而将旧数组标记为垃圾收集)?为什么不直接将新值赋给现有数组呢?
for (int k = 0; k < 4; k++) { (and thus
geometry[i][j][k] = foo;
}