[英]C pointers with Structs and 2D Arrays
我對這些C指針的工作方式感到困惑。
這是我正在嘗試做的事情:
創建具有行,列和網格(預定義大小的2d數組)的結構。
typedef struct
{
int row;
int column;
int (*matrix)[GRID_SIZE];
} parameters;
現在我創建一個
int grid[GRID_SIZE][GRID_SIZE] = {
{6, 5, 3, 1, 2, 8, 7, 9, 4},
{1, 7, 4, 3, 5, 9, 6, 8, 2},
{9, 2, 8, 4, 6, 7, 5, 3, 1},
{2, 8, 6, 5, 1, 4, 3, 7, 9},
{3, 9, 1, 7, 8, 2, 4, 5, 6},
{5, 4, 7, 6, 9, 3, 2, 1, 8},
{8, 6, 5, 2, 3, 1, 9, 4, 7},
{4, 1, 2, 9, 7, 5, 8, 6, 3},
{7, 3, 9, 8, 4, 6, 1, 2, 5}};
parameters *data = (parameters *) malloc(sizeof(parameters));
data->row = 1;
data->column = 2;
data->matrix = grid; // is this right?
int** test = data->matrix; //this is wrong.
我的目標是在創建新線程時將該結構作為數據傳遞。 當在結構中創建2D數組並隨后使用它時,我對指針系統的工作原理一無所知。 任何幫助表示贊賞。
編輯...這是我的新代碼。 :)
parameters *data = malloc(sizeof(parameters)); //make sure to free thread after
data->row = 1;
data->column = 2;
data->matrix = grid;
int (*test)[GRID_SIZE] = data->matrix;
printf("first value, %d\n", test[0][0]);
這樣的事情應該起作用。 像這樣定義您的結構:
typedef struct
{
int row;
int column;
int matrix[GRID_SIZE][GRID_SIZE];
} parameters;
像這樣復制矩陣:
memcpy( data->matrix, grid, sizeof(grid) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.