gpt4 book ai didi

c - C 结构体中的可变二维数组

转载 作者:行者123 更新时间:2023-11-30 16:49:43 30 4
gpt4 key购买 nike

这可能是一个答案简单的问题,但我没有找到任何类似的问题并提供适当的解决方案。我正在尝试在 C 中创建一个 struct ,它有两个变量,然后是一个二维数组,其维度等于用于创建 struct 的两个变量参数的维度。

struct image{
int width;
int hight;
int pixles[width][height];
};

现在我在编译它之前就知道这是行不通的,但我不知道如何去做这个工作。

最佳答案

您不能像评论中所说的那样直接这样做。有两种常见的习惯用法可以模拟它(假设支持 VLA):

  1. 您仅在结构中存储指向(动态分配的)数组的指针,然后将其转换为指向 2D VLA 数组的指针:

    typedef struct _Image {
    int width;
    int height;
    unsigned char * data;
    } Image;

    int main() {

    Image image = {5, 4};

    image.data = malloc(image.width * image.height);
    unsigned char (*data)[image.width] = (void *) image.data;
    // you can then use data[i][j];
  2. 如果动态分配结构,则可以使用大小为 0 的数组作为其最后一个元素(并再次将其转换为 VLA 指针):

    typedef struct _Image {
    int width;
    int height;
    unsigned char data[0];
    } Image;

    int main() {
    Image *image = malloc(sizeof(Image) + 5 * 4); // static + dynamic parts
    image->width = 5;
    image->height = 4;
    unsigned char (*data)[image->width] = (void *) &image->data;
    // you can then safely use data[i][j]

如果您的 C 实现不支持 VLA,则必须恢复到通过 1D 指针模拟 2D 数组的旧习惯用法:data[i + j*image.width]

关于c - C 结构体中的可变二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42476503/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com