我对这些C指针的工作原理感到困惑。
以下是我要做的事情:
创建一个包含行,列和网格的结构(预定义大小的二维数组)。
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]);
答案 0 :(得分:0)
这样的事情应该有效。 像这样定义你的结构:
typedef struct
{
int row;
int column;
int matrix[GRID_SIZE][GRID_SIZE];
} parameters;
像这样复制矩阵:
memcpy( data->matrix, grid, sizeof(grid) );