我需要在坐标上执行9种不同的操作,具体取决于坐标的位置。我有一个函数返回给定坐标(向下,向上,向左,向右或对角线)周围位置的坐标。 9种不同的操作是不同的可能“类型”坐标;如果我正在处理坐标(0,0),则唯一有效的操作是正确的,向右下的。
我有一个结构,我存储对每种坐标类型有效的方向。 4为角坐标,1为所有内坐标,4为边角行的非角列。
我存储所有方向的结构中的字段是一个名为“library”的动态二维数组。每行库都对应一种坐标,包含该类型坐标的所有有效方向。我没有找到一种方法一次分配一行值,但我不能单独用循环分配它们。
我试过的是:
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));
}
如何将这些值添加到数组的每一行?我尝试将结构定义更改为静态数组,但这也不起作用。这是因为我正在使用指向结构的指针吗?
答案 0 :(得分:4)
假设使用C99,您可以在行上使用复合文字和memcpy()
。对于k
行,这可能如下所示:
#define SEARCH_DIRECTIONS 9
memcpy(searches->library[k], ((int [SEARCH_DIRECTIONS]){ 1, 2, 3 }),
sizeof(int) * SEARCH_DIRECTIONS);
答案 1 :(得分:1)
你不能在C中执行此操作。没有可供分配的数组文字,只有数组初始化表达式。
我认为解决方案是简单地从坐标和场的大小计算所需的值,从我的理解应该是简单的。
此外,具有恒定大小的文字初始化值似乎与动态分配所有这些相反。
此外:
答案 2 :(得分:1)
static const int Library0[] = {2, 3, 4, -1};
static const int Library1[] = {4, 5, 6, -1};
static const int Library2[] = {2, 3, 4, 5, 6, -1};
static const int Library3[] = {0, 1, 2, 3, 4, 5, 6, 7, -1};
static const int Library4[] = {0, 1, 2, -1};
static const int Library5[] = {0, 6, 7, -1};
static const int Library6[] = {0, 1, 2, 6, 7, -1};
static const int Library7[] = {0, 1, 2, 3, 4, -1};
static const int Library8[] = {0, 4, 5, 6, 7, -1};
static const int * Library[] = {
Library0, Library1, Library2,
Library3, Library4, Library5,
Library6, Library7, Library8,
};
typedef struct{
int active_length; // Size of active array of searches
const int* active; // Active array of searches
const int** library; // Library of array of searches
} SearchLibrary;
searches->library = Library;
编辑:修复语法错误。