Мне нужно выполнить 9 различных операций с координатой, в зависимости от положения координаты. У меня есть функция, которая возвращает координаты позиции вокруг данной координаты (вниз, вверх, влево, вправо или по диагонали). 9 различных операций - это разные возможные «типы» координат; если я имею дело с координатой (0, 0), единственные допустимые операции - это право, вниз-вправо и вниз.
У меня есть структура, в которой я храню направления, действительные для каждого типа координат. 4 для угловых координат, 1 для всех внутренних координат и 4 для неугловых столбцов ребер-строк.
Поле в структуре, где я храню все направления, представляет собой динамический двумерный массив, называемый «библиотека». Каждая строка библиотеки будет соответствовать типу координат, содержащему все действительные направления для этого типа координат. Я не нашел способа присваивать значения по одной строке за раз, и я не могу назначить их по отдельности с помощью цикла.
То, что я пробовал, это:
searches->library[0][0] = {2, 3, 4, -1};
searches->library[1][0] = {4, 5, 6, -1};
searches->library[2][0] = {2, 3, 4, 5, 6, -1};
searches->library[3][0] = {0, 1, 2, 3, 4, 5, 6, 7, -1};
searches->library[4][0] = {0, 1, 2, -1};
searches->library[5][0] = {0, 6, 7, -1};
searches->library[6][0] = {0, 1, 2, 6, 7, -1};
searches->library[7][0] = {0, 1, 2, 3, 4, -1};
searches->library[8][0] = {0, 4, 5, 6, 7, -1};
Но это дает мне p2AdjacencyMatrix.c:179: error: parse error before '{' token
для каждой строки.
Я также пробовал:
searches->library[][9] = {{2, 3, 4, -1},
{4, 5, 6, -1},
{2, 3, 4, 5, 6, -1},
{0, 1, 2, 3, 4, 5, 6, 7, -1},
{0, 1, 2, -1},
{0, 6, 7, -1},
{0, 1, 2, 6, 7, -1},
{0, 1, 2, 3, 4, -1},
{0, 4, 5, 6, 7, -1}};
И результат это p2AdjacencyMatrix.c:189: error: parse error before ']' token
Вот определение структуры:
typedef struct{
int active_length; // Size of active array of searches
int* active; // Active array of searches
int** library; // Library of array of searches
} SearchLibrary;
А выделение памяти для динамического массива:
SearchLibrary* searches;
searches = (SearchLibrary *) malloc(sizeof(SearchLibrary*));
int search_cases = 9, search_directions = 9;
searches->library = (int **) malloc(search_cases * sizeof(int *));
searches->active = (int *) malloc(search_directions * sizeof(int));
int i;
for(i = 0; i < search_cases; i++){
searches->library[i] = (int *) malloc(search_directions * sizeof(int));
}
Как я могу добавить эти значения в каждую строку массива? Я попытался изменить определение структуры на статический массив, но это тоже не сработало. Это происходит потому, что я использую указатель на структуру?