【发布时间】:2016-06-23 01:54:29
【问题描述】:
我对这些 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.
我的目标是在创建新线程时将该结构作为数据传递。在结构中创建二维数组并稍后使用它时,我对指针系统的工作原理一无所知。任何帮助表示赞赏。
编辑...这是我的新代码.. 看起来它正在工作! :)
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) 不要在 C 中转换
malloc和朋友的结果。2)int **不能引用二维数组。指针不是数组。 -
如果您将
data传递给一个线程,请记住这不会复制任何内容,并且您必须确保不要在没有同步的情况下从两个不同的线程同时访问grid