如何将数组存储到C中的数组中?

如何将数组存储到C中的数组中?,c,arrays,C,Arrays,假设我有一个固定大小的数组,它存储颜色的RGB。 例如: arrayOfColors = { {0, 0, 255}, {0, 0, 0}, {255, 255, 255} } 我还有另一个数组,ArrayOfColor,可以存储很多颜色。 例如: arrayOfColors = { {0, 0, 255}, {0, 0, 0}, {255, 255, 255} } 我不确定什么是最好的方法,但我已经尝试过了。但是当我使用这种方法时,会出现错误。请帮帮我,我对C语言很陌生。提前谢谢你 u

假设我有一个固定大小的数组,它存储颜色的RGB。 例如:

arrayOfColors = { {0, 0, 255}, {0, 0, 0}, {255, 255, 255} } 
我还有另一个数组,ArrayOfColor,可以存储很多颜色。 例如:

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;
这里

rowColors
是一个无符号字符指针,即
rowColors[0]
是一个单个字符,字符不能像下面那样保存字符缓冲区

rowColors[0] = color1; /* rowColors[0] is a char, it can't hold char buffer color1 */
rowColors[1] = color2;
如果希望将多个字符缓冲区(如
color1
color2
存储到
rowColors
)中,它应该是
无符号字符**
类型或指针数组而不仅仅是
无符号字符*
类型

示例代码

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

unsigned char *rowColors[2]; /* USE ARRAY OF POINTERS */
for(int row = 0;row < 2; row++) {
    rowColors[row] = malloc(MAX_EACH_BUF_SIZE)); /* ALLOCATE MEMORY FOR EACH POINTER FIRST, define MAX_EACH_BUF_SIZE value accordingly */
}
/* AND THEN STORE INTO ARRAY OF POINTER */
rowColors[0] = color1;
rowColors[1] = color2;
无符号字符color1[3]={0,0,0};
无符号字符color2[3]={0,255,255};
无符号字符*行颜色[2];/*使用指针数组*/
对于(int行=0;行<2;行++){
rowColors[row]=malloc(MAX_EACH_BUF_SIZE));/*首先为每个指针分配内存,相应地定义MAX_EACH_BUF_SIZE值*/
}
/*然后存储到指针数组中*/
行颜色[0]=color1;
行颜色[1]=颜色2;

您可以使用
C结构来完成。这并没有描述在另一个数组中声明一个数组的过程,但它可以满足您的需要

首先需要声明一个结构类型对象。然后为该结构创建一个数组。有关更好的理解,请参见下面的示例:

struct RGBColor
{
  unsigned int R, G, B;
};

RGBColor arrayOfColors[] = { {0, 0, 255}, {0, 0, 0}, {255, 255, 255} };

int main ()
{
  int len = sizeof (arrayOfColors) / sizeof (arrayOfColors[0]);
  int i;
  for (i = 0; i < len; i++)
    {
      printf ("{%d, %d, %d}\n", arrayOfColors[i].R, arrayOfColors[i].G,
          arrayOfColors[i].B);
    }
  return 0;
}

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

x = color1;
x
的类型必须是
无符号字符*
。因此,您可以首先设置一个
无符号字符*
数组来存储单独数组的地址,如
color1
color2

unsigned char *colors[2];

colors[0] = colors1;
colors[1] = colors2;
然而,最终可能更简单的方法是只设置一个Nx3数组,其中包含
无符号字符

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];

sizeof()
返回的类型是
size\u t
,而不是
int
此答案缺少以下语句:
\include
。建议不要期望C的初学者知道this@kamolHasan非常感谢。但是,如果我想将struct RGBColor类型的ArrayOfColor发送到其他处理器,我应该传递什么数据类型?例如:MPI_发送(数组颜色,3,?数据类型?,0,0,MPI_通信世界);谢谢你,这是我一直在寻找的答案:),对不起,我不能更新你的帖子,因为我没有足够的声誉points@Thomas我很高兴我的回答帮助了你。欢迎使用堆栈溢出。
unsigned char (*colors)[3] = malloc( sizeof *colors * N );
colors[0][0] = color1[0];