这可能是一个简单答案的问题,但我找不到任何与之相似的问题。我试图在C中创建一个struct
,它有两个变量,然后是一个二维数组,其维数等于用于创建struct
的两个变量参数的维数。
struct image{
int width;
int hight;
int pixles[width][height];
};
现在我知道在我编辑它之前这不起作用,但我不知道如何开始这项工作。
答案 0 :(得分:0)
你不能像评论中所说的那样直接这样做。 模拟它有两种常见的习惯用法(假设支持VLA):
您只在结构中存储一个指向(动态分配的)数组的指针,然后将其转换为指向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];
如果动态分配结构,可以使用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]