【问题标题】:Pointer to 2D array as function parameter指向二维数组的指针作为函数参数
【发布时间】:2017-02-03 13:41:22
【问题描述】:

到目前为止,这段 C++ 代码对我有用:

Main.cpp:

unsigned __int16** image_data; 
image_data = Grabber->get_image_data(1);

interface.cpp:

unsigned __int16** Grabber::get_image_data(int image_num) {
    unsigned __int16 **pixel_values = 0;
    pixel_values = new unsigned __int16*[height];
    for (int h = 0; h < height; h++) {
        pixel_values[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            pixel_values[h][w] = ...;
        }
    }
    return pixel_values;
}

但现在我想将数组作为指向函数的指针传递。 我在下面的代码中尝试过,但它不再起作用了。

Main.cpp:

unsigned __int16** image_data;
Grabber->get_image_data(1, &image_data);

Interface.cpp:

int Grabber::get_image_data(int image_num, unsigned __int16*** image_data) {
    *image_data = new unsigned __int16*[height];
    for (int h = 0; h < height; h++) {
        *image_data[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            *image_data[h][w] = ...;
        }
    }
    return 0;
}

我的推理有什么错误吗?

【问题讨论】:

  • #define 对我不起作用,您遇到编译器错误?
  • 抱歉,没有编译错误
  • 我已经删除了这些点;如果它们包含重要代码,则应包含它们。如果没有,那没关系,您可以将它们排除在外。
  • 你不应该这样存储图像数据;使用平面缓冲区(即__int16*)并手动计算索引要容易得多,也更好。更好的是,使用 std::vector&lt;int16_t&gt;,它使用标准 typedef 并自动管理其内存。
  • 更好的解决方案是通过引用传递

标签: c++ arrays pointers multidimensional-array


【解决方案1】:

*image_data[h] 表示*(image_data[h])(即image_data[h][0]),而不是(*image_data)[h](或image_data[0][h])。
后者是你想要的。

如果你引入一个局部变量,它会更容易正确:

int ..::get_image_data(int image_num, unsigned __int16*** image_data) {
    ...
    unsigned __int16** data = new unsigned __int16*[height];
    *image_data = data;
    for (int h = 0; h < height; h++) {
        data[h] = new unsigned __int16[width];
        for  (int w = 0; w < width; w++) {
            data[h][w] = ...;
        }
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多