C语言中的二维数组typedef

16

在C语言中是否有一种方法可以定义二维数组的类型?类似于:

typedef char[10][10] board;

这个例子无法编译。有没有什么方法可以解决?还是有其他的解决方案?


2
你试过这样写吗:typedef char board[][10];? - Lorenzo Marcon
1
如何定义一个名为board的二维数组变量?答案是:char board[10][10];。如果要创建一个类型定义board而不是一个变量,则使用“存储类”typedeftypedef char board[10][10];。然后,您可以使用以下代码创建3个棋盘:board b1, b2, b3;。您还可以创建一个棋盘数组:board ab[10]; - Jonathan Leffler
2个回答

21

尝试这个:

typedef char board[10][10];

然后您可以将新数组定义为:

board double_array = {"hello", "world"}; 

这与以下情况相同:

char double_array[10][10] = {"hello", "world"};

二维数组的新定义将是什么? - user2216190
1
@user2216190:你的意思是“给定一个有效的typedef,如何创建该类型的变量?”如果是这样,答案是board b;会创建一个类型为board的变量b,它与char b[10][10];完全等价(因为typedef引入了一种类型的替代名称,而不是新类型)。 - Jonathan Leffler
当使用 board double_array = {"hello", "world"} 声明数组时,我如何访问数组元素? - r18ul
板 a[25]; // 它是否类似于 char a[25][10][10]; - beta_me me_beta

5

类型定义语句

类型定义语句用于使用现有的其他数据类型来定义用户自定义数据类型。

基本格式:

typedef existing_data_type new_user_defined_data_type;

所以,你的应该是:

typedef char board[10][10];

你可以像Yu Hao所说的那样使用它,或者你也可以使用char指针来定义一个2D数组,如下所示:

typedef char *board[10];

然后您可以按照YU Hao所描述的方式操作。这样,您就不需要硬编码要在字符串中使用的字符数。


2
有了名为“board”的名称,很可能该类型将用于表示游戏棋盘,而不是用于保存字符串本身。虽然这只是一个小细节。此外,严格来说,“typedef”仅为现有类型提供名称(别名),而不是创建新类型。这是一个微妙的细节,不会从你的答案中实质性地减损其价值。 - Jonathan Leffler
@JonathanLeffler 嗯,是的!收到了先生的意见,那看起来更有可能,谢谢! - 0decimal0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接