C 初始化结构内部的二维数组
我正在尝试初始化结构中的int的二维数组。 在我的程序“全局访问”开始时,我创建了一个结构,以及该结构的一个数组:C 初始化结构内部的二维数组,c,C,我正在尝试初始化结构中的int的二维数组。 在我的程序“全局访问”开始时,我创建了一个结构,以及该结构的一个数组: struct block { int theblock[3][3]; }; struct block blockArray[6]; 然后,我尝试初始化函数中的结构数组: void afunction() { int block1[3][3] = { {0, 1, 0}, {0, 1, 0}, {0, 1, 0}
struct block {
int theblock[3][3];
};
struct block blockArray[6];
然后,我尝试初始化函数中的结构数组:
void afunction() {
int block1[3][3] = {
{0, 1, 0},
{0, 1, 0},
{0, 1, 0}
};
blockArray[0].theblock = block1;
}
编译器错误:
error: incompatible types when assigning to type 'int[3][3]' from type 'int[*][3]'
谁能解释一下我做错了什么,我知道这是很基本的东西,但我真的试着自己去阅读并解决这个问题。我来自Java,试图学习C。创建一个临时结构,并将其分配给结构数组中的元素:
struct block temp = { { {0, 1, 0}, {0, 1, 0}, {0, 1, 0} } } ;
blockArray[0] = temp ;
或者只需使用阵列并复制它:
int temp[3][3] = { {0, 1, 0}, {0, 1, 0}, {0, 1, 0} } ;
assert( sizeof( temp ) == sizeof( blockArray[0].theblock ) ) ;
memcpy( blockArray[0].theblock , temp , sizeof( temp ) ) ;
在C语言中不能以这种方式复制数组。因此,我认为在Java中也不能这样做 例如,您可以复制周围的指针
blockArray[0].theblock = block1;
但所有这些都将使blockArray[0]与&block1[0]位于同一地址。它不复制任何内容,它是一个肤浅的副本
您必须使用memcpy或在循环中复制成员:
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
blockarray[0].theblock[i][j] = block1[i][j];
在C语言中,您不能分配给数组。要么在创建数组时对其进行初始化,要么逐个元素填充数组。这是一份深度复制品。如果结构的成员是动态分配的,那么这些成员只是别名,而不是深度复制的结果。memcpy还可能阻止在这种特殊情况下进行某些优化。@Dogbert你在混淆视听。我建议您再次阅读您的链接。谢谢,这听起来是最简单的解决方案。我试试看。