在头文件中定义一个设置大小的数组

时间:2017-08-23 21:52:10

标签: c

我想在头文件中定义指向设定值的字符数组的指针。 基本上 - 我想在头文件中声明一个棋盘。

这样的事情会起作用,还是应该使用#define? 谢谢。

#ifndef myHeader
#define myHeader

typedef *char[8][8] Chessboard;

#endif

编辑:

我不得不承认我正在练习即将进行的测试,这只是一项旧任务(来自之前的一项测试)。 经过一些思考和研究头文件的行为后,我发现了

char array[8][8]; 
char*** Chessboard = (char***) malloc (sizeof (char**)); 
*(Chessboard) = array; 

可以工作 - 但是,我应该声明一个类型,并且不知道如何做到这一点。

澄清 - 我想定义一个类型“Chessboard”,这是一个指向8x8数组的指针。

1 个答案:

答案 0 :(得分:2)

  

我想定义一个类型“Chessboard”,它是一个指向8x8数组的指针。

// .h
typedef char (*Chessboard_T)[8][8];
extern Chessboard_T Chessboard_Var;

// .c
static char board[8][8];
Chessboard_T Chessboard_Var = &board;

// Usage example
void foo() {
   (*Chessboard_Var)[0][4] = 'K';
}

通常不会在typedef中隐藏指针。

捕获状态的更常见解决方案是使用Chessboard作为结构。例如:

// Chessboard.h
typedef struct {
  char board[8][8];
  unsigned move_count;
  int en_pass;
  int castle;
  int *history;
  // etc.
} Chessboard;

// Various functions that operate with a Chessboard
Chessboard *Chessboard_Create(void);
Chessboard_Destroy(Chessboard *cb);
Chessboard_This(..);  
Chessboard_That(..);
...