初始化结构指针到指针

时间:2017-05-14 12:08:48

标签: c pointers struct pointer-to-pointer

我有一个基于控制台的应用程序,其中我使用指针指针。这是扫雷游戏,我需要使用指针指针创建板。我必须将我的this指针传递给指向函数的指针以进行初始化。但问题是,它在函数初始化但我无法访问main。我尝试使用引用/地址传递。如果有人能帮助我,我将不胜感激。

由于

    #include <stdlib.h>
#include<stdio.h>

#define MINE 0
#define FLAG 1
#define REVEALED 2

struct Location {
    int value;
    char status_byte;
};

struct Game {
    int width;
    int height;
    int mines;
    int mines_flagged;
    int flags;
};

int mine_clicked = 1;

int board_width;
int board_height;

int total_mines;


void initialize_mine_values(struct Game *game, struct Location** mine_board);

void main() {
    struct Game game;
    struct Location** mine_board = NULL;


    //Location actualThing;
    //Location *pointer = &actualThing;
//  Location **mine_board = &pointer;

    printf("\t** Student_number Student_name Assignment 3** \n");

    initialize_mine_values(&game, &(*mine_board));

    printf("game.width  : %d", game.width);

    //test//
    /*for (int i = 0; i < game.width + 2; i++)
    {
    for (int j = 0; j < game.height + 2; j++)
    {
    mine_board[i][j].value = 12;
    }
    }
    */
    for (int i = 0; i < game.width + 2; i++)
    {
        for (int j = 0; j < game.height + 2; j++)
        {
            printf("\n %d %d", i, j);
            //   Location l = mine_board[i][j];
            printf(" , here it is location value %d", mine_board[i][j].value);
        }
    }
    //test end



    scanf("%d", &board_height);
    getchar();

}
void initialize_mine_values(struct Game *game1, struct Location** mine_board)
{
    //mines_flagged and flag is set to 0
    game1->flags = 0;
    game1->mines_flagged = 0;

    //take width of the game board
    printf("\nEnter the width of the board");
    scanf("%d", &(game1->width));


    printf("\nEnter the height of the board");
    scanf("%d", &(game1->height));


    do {
        printf("Enter total number of mines for the game, Number of mines should be less than %d ", game1->width*game1->height);
        scanf("%d", &total_mines);
    } while (total_mines >= game1->width*game1->height);


    //initializing mine board

    mine_board = (Location**)malloc(sizeof(Location*) * (game1->height + 2));
    // mine_board[0] = (struct Location*)malloc(sizeof(struct Location) * (game1->width + 2) * (game1->height + 2));


    for (int i = 0; i < game1->height + 2; i++) {
        mine_board[i] = (struct Location*)malloc(sizeof(struct Location)* (game1->width + 2));
    }
    for (int i = 0; i < game1->width + 2; i++)
    {
        for (int j = 0; j < game1->height + 2; j++)
        {
            mine_board[i][j].value = i+j;
        }
    }

    for (int i = 0; i < game1->width + 2; i++)
    {
        for (int j = 0; j < game1->height + 2; j++)
        {
            printf("\n %d %d", i, j);
            //   Location l = mine_board[i][j];
            printf(" , here it is location value %d", mine_board[i][j].value);
        }
    }


}

1 个答案:

答案 0 :(得分:0)

您需要向函数传递要在函数内更改的变量的地址。

在您的案例中传递&mine_board。您还需要相应地调整函数以获取&main_board评估的内容。 main_board struct Location**struct Location*** pmine_board

在分配功能中,然后使用

*pmine_board = malloc( ....

(*pmine_board)[i] = malloc( ...

(*pmine_board)[i][j].value = ...

除此之外

  • 放弃所有那些无用的演员
  • 将错误检查(和处理)添加到可能失败的功能(例如malloc()