初始化联合类型的二维数组(整数或字符)
Initializing a 2D array of union type (ints or chars)
所以我正在尝试创建一个大小为行 x 列的二维数组。我为它分配了 space (或者至少我认为),现在我正在尝试初始化它或至少测试它以查看它是否可以保存值。但是,每当我输入联合应包含两者的 int 或 char 时,我都会收到类型不兼容的错误。
我认为我的联合有问题,在我尝试在结构中声明矩阵的方式中,因为我的错误表明它无法识别我的类型 Mine 来保存整数或字符....或者我我只是错误地将值放入二维数组。
我现在只是想测试并确保我几乎正确地制作了二维数组。
错误
test.c:49:29: error: incompatible types when assigning to type ‘Mine’ from type ‘int’
myBoard->boardSpaces[0][0] = 5;
代码
typedef union
{
int ajacentMines;
char mineHere;
}Mine;
typedef struct boards
{
int rows, columns; //rows and columns to make the array
Mine **boardSpaces; //a void pointer to hold said array
}Board;
Board *createBoard(int rows, int columns)
{
Board *b = malloc(sizeof(Board));
b->rows = rows;
b->columns = columns;
b->boardSpaces = malloc(rows*sizeof(Mine*)); //allocate first dimmension
int i;
for(i = 0; i < rows; i++)
b->boardSpaces[i] = malloc(columns*sizeof(Mine)); //allocate second dimmension
return b;
}
int main()
{
int rows = 3;
int columns = 4;
Board *myBoard = createBoard(rows,columns);
myBoard->boardSpaces[0][0] = 5;
printf("DONE\n");
}
myBoard->boardSpaces[0][0]
是 Mine
类型,而不是 int
或 char
。
如果你想赋值一个int:
myBoard->boardSpaces[0][0].ajacentMines = 5;
对于一个字符:
myBoard->boardSpaces[0][0].mineHere= '5';
联合是内存中同一位置的多种解释 - 但要使用的解释必须由代码提供。
所以我正在尝试创建一个大小为行 x 列的二维数组。我为它分配了 space (或者至少我认为),现在我正在尝试初始化它或至少测试它以查看它是否可以保存值。但是,每当我输入联合应包含两者的 int 或 char 时,我都会收到类型不兼容的错误。
我认为我的联合有问题,在我尝试在结构中声明矩阵的方式中,因为我的错误表明它无法识别我的类型 Mine 来保存整数或字符....或者我我只是错误地将值放入二维数组。
我现在只是想测试并确保我几乎正确地制作了二维数组。
错误
test.c:49:29: error: incompatible types when assigning to type ‘Mine’ from type ‘int’
myBoard->boardSpaces[0][0] = 5;
代码
typedef union
{
int ajacentMines;
char mineHere;
}Mine;
typedef struct boards
{
int rows, columns; //rows and columns to make the array
Mine **boardSpaces; //a void pointer to hold said array
}Board;
Board *createBoard(int rows, int columns)
{
Board *b = malloc(sizeof(Board));
b->rows = rows;
b->columns = columns;
b->boardSpaces = malloc(rows*sizeof(Mine*)); //allocate first dimmension
int i;
for(i = 0; i < rows; i++)
b->boardSpaces[i] = malloc(columns*sizeof(Mine)); //allocate second dimmension
return b;
}
int main()
{
int rows = 3;
int columns = 4;
Board *myBoard = createBoard(rows,columns);
myBoard->boardSpaces[0][0] = 5;
printf("DONE\n");
}
myBoard->boardSpaces[0][0]
是 Mine
类型,而不是 int
或 char
。
如果你想赋值一个int:
myBoard->boardSpaces[0][0].ajacentMines = 5;
对于一个字符:
myBoard->boardSpaces[0][0].mineHere= '5';
联合是内存中同一位置的多种解释 - 但要使用的解释必须由代码提供。