初始化联合类型的二维数组(整数或字符)

时间:2015-04-24 00:50:06

标签: c arrays matrix 2d unions

所以我试图创建一个大小为x行的二维数组。我为它分配了空间(或者至少我认为),现在我正在尝试初始化它或者至少测试它以查看它是否可以保存值。但是,每当我输入一个联合应该同时包含两者的int或char时,我都会收到不兼容的类型错误。

我认为我的联盟有问题,我试图在一个结构中声明一个矩阵,因为我的错误说它不能识别我的类型我要保持整数或字符....或者我我只是错误地将值放入2D数组中。

我现在只是尝试测试并确保我正确地制作2D阵列。

ERROR

test.c:49:29: error: incompatible types when assigning to type ‘Mine’ from type ‘int’
  myBoard->boardSpaces[0][0] = 5;

CODE

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");
}

1 个答案:

答案 0 :(得分:2)

myBoard->boardSpaces[0][0]的类型为Mine,而不是intchar

如果要分配int:

myBoard->boardSpaces[0][0].ajacentMines = 5;

对于char:

myBoard->boardSpaces[0][0].mineHere= '5';

联合是对内存中相同位置的多种解释 - 但要使用的解释必须由代码提供。