c++ - 指向二维数组的指针作为函数参数

标签 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;
}

我的推理有没有错误?

最佳答案

*image_data[h]表示*(image_data[h])(即image_data[h][0]),不是 (*i​​mage_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;
}

关于c++ - 指向二维数组的指针作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39698995/

相关文章:

c++ - Qt 或任何其他语言。事件循环

c++ - 使用派生的右值引用初始化基

java - Java中将字符串转换为二维字符串数组

c - 将字符串数组分配给字符串指针数组

ios - 重写一些基本的 swift 代码,使用大的 if 语句

c++ - Qt调整窗口大小以适应滚动区域问题中的纵横比

c++ - 用 Cython 包装许多类似的 cpp 类

c++ - 指向用数组初始化的矩阵的指针数组

c++ - 指向未知位置的指针数组

java - JNI : return an object from Java to C++, 并将其传递回 Java