簡體   English   中英

具有結構和2D數組的C指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM