0

我有一个指针数组

float** data = new float*[NX];
for(int i = 0; i < NX; ++i)
{
    data[i] = new float[NY];
}

我像这样清除了多数组,然后我以这种方式在其中输入了一些值(并用 cout 确认值是正确的-

Loop{
    data[i][j] = someValue;
    cout << data[i][j];
}

我在那里有非常复杂的值,例如 10663.3、11140.6 等,它们需要处于正确的位置,所以我认为我不会在那里得到误报

最后我试图将数据写入 NetCDF 文件

该方法看起来像这样

NcBool put(const float* vals, long c0, long c1, long c2, long c3, long c4)

取自这个例子:http ://www.unidata.ucar.edu/software/netcdf/examples/programs/simple_xy_wr.cpp

我是这样做的

fileData->put(&data[0][0], NX, NY);

但是,当我开始从文件中读取时,我得到了胡言乱语。我的猜测是我以错误的方式将数组提供给该方法。但是我无法找出正确的方法。

我也很感激指针指针的好教程。我一直找不到

4

1 回答 1

2

当您按照您的方式创建数组数组时,它是不连续的。您基本上在内存中某个位置NX的不同位置都有数组。NX我不知道该put函数的作用,但根据它的签名,它可能需要一个连续的浮点数组。但无论它期望什么,除了第一个数组之外,它不可能访问您的数据,因为有关其他数组位置的信息无法从&data[0][0].

相反,您可以做的是创建一个单维数组,并通过一些简单的数学将其视为二维数组。

float * data = new float[NX * NY];

这是您在 (x,y) 位置访问数组的方式:

data[x * NY + y] = 1.234;

然后将它传递给这样的put函数:

fileData->put(data, NX, NY);

您可能希望将其封装在为您处理算术的类中,或者您可以使用已经完成的库,例如Boost.MultiArray

于 2013-07-28T20:09:24.543 回答