在struct中初始化一个2d数组

时间:2014-11-18 21:35:53

标签: c

我正在尝试在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。

2 个答案:

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