我有一个指针数组
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);
但是,当我开始阅读文件时,我得到了乱码。我的猜测是我以错误的方式将数组提供给方法。但是我想不出正确的方法。
我也希望能有一个很好的关于指向指针的教程。我还没找到
最佳答案
当您按照自己的方式创建数组数组时,它不是连续的。您基本上在内存中某处的 NX
不同位置有 NX
数组。我不知道 put
函数的作用,但根据它的签名,它可能需要一个连续的 float 数组。但无论它期望什么,它都不可能访问您的数据,除了第一个数组,因为有关其他数组位置的信息无法从 &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 .
关于c++ - 正确处理指向指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17912262/