我正在尝试在struct中初始化一个2d的int数组。 在我的程序开始(全局访问)我创建了一个struct,以及这个struct的数组:
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。
答案 0 :(得分:3)
创建一个临时结构并将其分配给结构数组的元素:
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 ) ) ;
答案 1 :(得分:-1)
你不能用这种方式在C中复制数组。就此而言,我认为你也不能用Java做到这一点。
您可以复制指针,例如
blockArray[0].theblock = block1;
但所有这一切都是将blockArray [0] .blocks点与& 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];