指向2D数组作为函数参数

时间:2016-09-26 09:19:35

标签: c++ arrays pointers multidimensional-array

到目前为止,这个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;
}

我的推理是否有任何错误?

1 个答案:

答案 0 :(得分:6)

*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;
}