在函数中更改固定大小的3D数组的值



我有一个堆栈分配的固定大小的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;
}

相关内容

  • 没有找到相关文章

最新更新