【问题标题】:C pointers with Structs and 2D Arrays带有结构和二维数组的 C 指针
【发布时间】: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

标签: c arrays pointers struct


【解决方案1】:

这样的事情应该可以工作。 像这样定义你的结构:

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

像这样复制矩阵:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    相关资源
    最近更新 更多