座標の位置に応じて、座標に対して9つの異なる操作を実行する必要があります。指定された座標の周囲の位置の座標(下、上、左、右、または対角線)を返す関数があります。9つの異なる操作は、異なる可能な「タイプ」の座標です。座標(0、0)を扱っている場合、有効な操作は右、右下、下のみです。
各タイプの座標に有効な方向を格納する構造があります。コーナー座標用に4、すべての内部座標用に1、エッジ行の非コーナー列用に4。
すべての方向を格納する構造のフィールドは、「ライブラリ」と呼ばれる動的な2次元配列です。ライブラリの各行は、あるタイプの座標に対応し、そのタイプの座標のすべての有効な方向が含まれます。ただし、一度に1行ずつ値を割り当てる方法は見つかりませんでした。また、ループを使用して値を個別に割り当てることはできません。
私が試したことは:
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));
}
これらの値を配列の各行に追加するにはどうすればよいですか?構造体の定義を静的配列に変更しようとしましたが、それも機能しませんでした。これは、構造体へのポインターを使用しているために発生していますか?