带有Structs和2D Arrays的C指针

时间:2016-03-08 22:01:52

标签: c arrays pointers struct

我对这些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]);

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效。 像这样定义你的结构:

typedef struct 
{
    int row;
    int column;
    int matrix[GRID_SIZE][GRID_SIZE];
} parameters;

像这样复制矩阵:

memcpy( data->matrix, grid, sizeof(grid) );