如何将2D数组传递给C中未知大小的函数?

时间:2019-02-07 17:38:02

标签: c pointers multidimensional-array

我正在尝试将图像读取到2D数组中,然后对其RGB值进行修改,然后创建一个调整大小的函数。在加载图像之前,图像的尺寸是未知的,因此看起来像这样。

我尝试将“ pixels”传递给无符号字符**,将pixels [0] [0]传递给无符号字符*,还有很多其他我不记得的方式。我在网上搜索了不同的方法,但似乎没有一个起作用。我已经看到,如果您定义像pixels [] [40]这样的数组之一的大小就可以了,但是直到加载图像后我才知道大小。

void invertImg(unsigned char **img, int height, int width)
{
    int h, w;
    for (h = 0; h < height; h++){
        for (w = 0; w < width * 3; w += 3){
            //Blue
            img[h][w] = ~img[h][w];
            //Green
            img[h][w + 1] = ~img[h][w + 1];
            //Red
            img[h][w + 2] = ~img[h][w + 2];
        }
    }
}


    // Get Image name and desired dimensions

    char header[54];
    unsigned char pixels[height][width * 3];

    FILE *in = fopen(img, "rb");
    FILE *out = fopen("out.bmp", "wb");

    fread(header, 1, 54, in);
    fread(pixels, 1, height * width * 3, in);


//function that the 2d array needs to be passed into
invertImg(pixels, height, width);


    fwrite(header, sizeof(char), HEADER_SIZE, out);
    fwrite(pixels, sizeof(char), height * width * 3, out);

    fclose(in);
    fclose(out);

如何将这个无符号字符数组放入函数中以能够修改其值?

2 个答案:

答案 0 :(得分:3)

您可以传递具有基于其他参数的大小的多维数组:

void invertImg(int height, int width, unsigned char img[height][width])
{
    ...

对此函数的不带参数名称的声明应如下所示:

void invertImg(int, int, unsigned char img[*][*]);

然后您可以像这样调用函数:

invertImg(height, width, pixels);

答案 1 :(得分:1)

void invertImg(unsigned char *img, int height, int width)
{
    int h, w;
    for (h = 0; h < height; h++){
        for (w = 0; w < width; w++){
            for (color = 0; color < 3, ++color) {
                img[ 3*width*h + 3*w + color] = ~img[ 3*width*h + 3*w + color]
            }
        }
    }
}