首页 > 解决方案 > 如何将数组存储到C中的数组中?

问题描述

假设我有一个固定大小为 3 的数组,用于存储颜色的 RGB。例子:

color[3] = {0, 0, 255}

我有另一个数组,arrayOfColors 存储许多颜色。例子:

arrayOfColors = { {0, 0, 255}, {0, 0, 0}, {255, 255, 255} } 

我不确定什么是最好的方法,但我已经尝试过。但是当我这样做时我有错误。请帮帮我,我对C语言很陌生。先感谢您!

unsigned char color1[3] = {0, 0, 0};
unsigned char color2[3] = {0, 255, 255};

unsigned char *rowColors = NULL;
rowColors = (unsigned char*)malloc((2) * sizeof(char));
rowColors[0] = color1;
rowColors[1] = color2;

标签: carrays

解决方案


请记住,除非它是一元运算符sizeof或一元运算符的操作数,否则&数组表达式color1color2将从“N 元素数组T”类型的表达式转换(“衰减”)为“指针T”,表达式的值将是数组的第一个元素的地址。所以在这样的表达中

x = color1;

x需要的类型unsigned char *。因此,您可以首先设置一个数组unsigned char *来存储单独数组的地址,例如color1and color2

unsigned char *colors[2];

colors[0] = colors1;
colors[1] = colors2;

然而,最终可能更简单的只是设置一个 Nx3 数组unsigned char

unsigned char colors[N][3];  // for some N

memcpy( colors[0], color1, sizeof color1 );

要动态分配它,请使用

unsigned char (*colors)[3] = malloc( sizeof *colors * N );

您可以像访问常规数组一样访问每个元素:

colors[0][0] = color1[0];

推荐阅读