c++ - 正确处理指向指针的指针

标签 c++ arrays pointers reference pointer-to-array

我有一个指针数组

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/

相关文章:

c++ - 在 C++ 中对 map 进行排序

c++ - 从 AMPL .dat 文件中读取 C++ 中的特定数据

c++ - 为什么我的析构函数被调用,我该如何修复它

java - 从给定数组创建逆序数组

c - 将指针传递给结构数组时出错

C:使用列表的数组的最后一个元素

C指针算术数组删除字符

c++ - 如何将已实现的虚拟成员函数作为参数传递

C 添加到双指针数组

android - 共享指针 : are there any gotcha differences between Android's "sp<>" template and BOOST's "shared_ptr<>" template?